Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

sem6_3

.c
Скачиваний:
0
Добавлен:
29.05.2019
Размер:
2.09 Кб
Скачать
#include <stdio.h>
#define SWAP(type, a, b) {type tmp = a; a = b; b=tmp;}

struct bound
{
 int left;
 int right;
};
void qsort(int* arr, int len)
{
 int left = 0;
 int right = len - 1;
 int mid;
 struct bound stack[512];
 int stack_pos = 0;
 int i, j;
 stack[1].left = left;
 stack[1].right = right;
 stack_pos++;
 /*do
 {
 for(int q = 0; q != len; ++q)
 printf("%d|", arr[q]);
 putchar('\n');
 left = stack[stack_pos].left;
 right = stack[stack_pos].right;
 stack_pos--;
 int mid = (right + left) / 2;
 i = left;
 j = right;

 while(i < j)
 {
 while(arr[i] < arr[mid]) 
 i++;
 while(arr[j] > arr[mid]) 
 j--;
 if(i < j)
 {
 SWAP(int, arr[i], arr[j]);
 i++;
 j--;
 }
 } 
 if(j != i)
 {
 stack[stack_pos].left = i;
 stack[stack_pos].right = right;
 stack_pos++;
 stack[stack_pos].left = left;
 stack[stack_pos].right = j;
 stack_pos++;
 }
 else
 {
 if((right - i) >= (j - left))
 {
 stack[stack_pos].left = i + 1;
 stack[stack_pos].right = right;
 stack_pos++;
 stack[stack_pos].left = left;
 stack[stack_pos].right = j;
 stack_pos++;
 }
 else
 {
 stack[stack_pos].left = i;
 stack[stack_pos].right = right;
 stack_pos++;
 stack[stack_pos].left = left;
 stack[stack_pos].right = j - 1;
 stack_pos++;
 }
 }
 }while(stack_pos != 0);*/

 do 
 {
  left = stack[stack_pos].left;
  right = stack[stack_pos].right;
  stack_pos--;
  do 
  {
  mid = (left + right) / 2;
  i = left;
  j = right;       
  do 
  {
   while (arr[i] < arr[mid]) 
    i++;
   while (arr[j] > arr[mid]) 
    j--;
   if(i <= j) 
   {
    SWAP(int, arr[i], arr[j]);
    i++; 
    j--;
   }
   }while (i <= j);
   if (i < mid) 
   { 
    if (i < right) 
    {
     stack_pos++;
     stack[stack_pos].left = i;
     stack[stack_pos].right = right;
    }
    right = j;      
   } 
   else 
   {  
    if(j > left) 
    { 
     stack_pos++;
     stack[stack_pos].left = left;
     stack[stack_pos].right = j;
    }
    left = i;
   }
  }while (left < right);
 }while(stack_pos != 0);
}

int main()
{
 int arr[] = {9, 3, 5, 2, 4};
 qsort(arr, 5);
 for(int q = 0; q != 5; ++q)
  printf("%d|", arr[q]);
 putchar('\n');
 return 0;
}
Соседние файлы в предмете Информатика
  • #
    29.05.20198.4 Кб0sem6_1
  • #
    29.05.2019237 б0sem6_1.c
  • #
    29.05.20198.43 Кб0sem6_2
  • #
    29.05.2019580 б0sem6_2.c
  • #
    29.05.20198.42 Кб0sem6_3
  • #
    29.05.20192.09 Кб0sem6_3.c
  • #
    29.05.201912.81 Кб1sem6_4
  • #
    29.05.20192.11 Кб0sem6_4.c
  • #
    29.05.20198.63 Кб0sem7_1
  • #
    29.05.20191.6 Кб0sem7_1.c
  • #
    29.05.20198.42 Кб0sem7_2