Не работает сортировка Qsort - C (СИ)
Формулировка задачи:
начал разбираться си и столкнулся с проблемой, не подскажите почему не работает?
Листинг программы
- //program qsort
- #include<stdio.h>
- #include<stdlib.h>
- int swap (int *array,int i, int j)
- {
- int a;
- a=array[i];
- array[i]=array[j];
- array[j]=a;
- return(*array);
- }
- int sort(int *array ,int left,int right)
- {
- int e=( (left+right) /2);
- int i=left;
- int j=right;
- do {
- while ((array[i]<= array[(left+right)/2])&&(i<=e))
- {
- i++;
- }
- while ((array[j]>array[(left+right)/2])&&(j>=e))
- {
- j++;
- }
- if(i<=j)
- {
- swap(array,i,j);
- }
- } while(i<j);
- if (left<j)
- {
- sort(array,1,j);
- }
- if(i<right)
- {
- sort(array,i,right);
- }
- return *array ;
- }
- int main()
- {
- int *array;
- int n ;
- printf("Write quantity of elements you want: ");
- scanf("%d",&n);
- array=(int*)malloc(sizeof( n));
- for(int i=0;i<n;i++)
- {
- printf("Write element from number %d: ",i+1);
- scanf("%d",&array[i]);
- }
- sort(array,0,n-1);
- for(int i=0;i<n;i++)
- {
- printf("%d",array[i]);
- }
- return 0;
- }
Решение задачи: «Не работает сортировка Qsort»
textual
Листинг программы
- #include<stdio.h>
- #include<stdlib.h>
- #include<time.h>
- #define N 10
- void swap (int *arr,int i, int j)
- { int a = arr[i];
- arr[i] = arr[j];
- arr[j] = a;
- }
- void sort(int *arr ,int left, int right)
- { int e = (arr[left]+arr[right])/2; //средний опорный элемент
- int i = left;
- int j = right;
- do
- { while (arr[i]<e) i++; //пока не найдем слева что-то большое
- while (arr[j]>e) j--; //пока не найдем справа что-то маленькое
- if(i<=j)
- { swap(arr,i,j); //поменяли местами
- i++; j--; //двинулись дальше
- }
- } while(i<j);
- if (left<j)
- sort(arr,left,j); //продолжаем слева
- if(i<right) //продолжаем справа
- sort(arr,i,right);
- }
- int main()
- {
- int *arr;
- arr=(int*)malloc(N*sizeof(int));
- srand((unsigned int) time(NULL));
- printf("Initial array:\n");
- for(int i=0;i<N;i++)
- { arr[i] = rand()%100;
- printf("%5d", arr[i]);
- }
- sort(arr,0,N-1);
- printf("\n\nSorted array:\n");
- for(int i=0;i<N;i++)
- printf("%5d", arr[i]);
- free(arr);
- flushall();
- getchar();
- return 0;
- }
Объяснение кода листинга программы
- Объединение файлов
stdio.h
,stdlib.h
иtime.h
для использования функций ввода-вывода, сортировки и работы со временем. - Определение константы
N
для задания размера массива. - Создание функции
swap
для обмена значениями двух переменных. - Создание функции
sort
для сортировки массива методом двусторонней обходной сортировки. - Инициализация массива случайными значениями в функции
main
. - Вызов функции
sort
для сортировки массива. - Вывод отсортированного массива в функции
main
. - Освобождение памяти, выделенной под массив, с помощью функции
free
. - Ожидание нажатия клавиши для завершения программы.
- Возврат значения 0 для успешного завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д