Не работает сортировка 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 для успешного завершения программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д