Не работает сортировка Qsort - C (СИ)

Узнай цену своей работы

Формулировка задачи:

начал разбираться си и столкнулся с проблемой, не подскажите почему не работает?
Листинг программы
  1. //program qsort
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. int swap (int *array,int i, int j)
  5. {
  6. int a;
  7. a=array[i];
  8. array[i]=array[j];
  9. array[j]=a;
  10. return(*array);
  11. }
  12. int sort(int *array ,int left,int right)
  13. {
  14. int e=( (left+right) /2);
  15. int i=left;
  16. int j=right;
  17. do {
  18. while ((array[i]<= array[(left+right)/2])&&(i<=e))
  19. {
  20. i++;
  21. }
  22. while ((array[j]>array[(left+right)/2])&&(j>=e))
  23. {
  24. j++;
  25. }
  26. if(i<=j)
  27. {
  28. swap(array,i,j);
  29. }
  30. } while(i<j);
  31. if (left<j)
  32. {
  33. sort(array,1,j);
  34. }
  35. if(i<right)
  36. {
  37. sort(array,i,right);
  38. }
  39. return *array ;
  40. }
  41. int main()
  42. {
  43. int *array;
  44. int n ;
  45. printf("Write quantity of elements you want: ");
  46. scanf("%d",&n);
  47. array=(int*)malloc(sizeof( n));
  48. for(int i=0;i<n;i++)
  49. {
  50. printf("Write element from number %d: ",i+1);
  51. scanf("%d",&array[i]);
  52. }
  53. sort(array,0,n-1);
  54.  
  55. for(int i=0;i<n;i++)
  56. {
  57. printf("%d",array[i]);
  58. }
  59. return 0;
  60. }

Решение задачи: «Не работает сортировка Qsort»

textual
Листинг программы
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4. #define N 10
  5.  
  6. void swap (int *arr,int i, int j)
  7. {   int a = arr[i];
  8.     arr[i] = arr[j];
  9.     arr[j] = a;
  10. }
  11.  
  12. void sort(int *arr ,int left, int right)
  13. {   int e = (arr[left]+arr[right])/2;   //средний опорный элемент
  14.     int i = left;
  15.     int j = right;
  16.    
  17.     do    
  18.     {   while (arr[i]<e)    i++;    //пока не найдем слева что-то большое
  19.         while (arr[j]>e)    j--;    //пока не найдем справа что-то маленькое
  20.         if(i<=j)
  21.         {   swap(arr,i,j);          //поменяли местами
  22.             i++; j--;               //двинулись дальше
  23.         }
  24.     } while(i<j);
  25.    
  26.     if (left<j)
  27.         sort(arr,left,j);           //продолжаем слева
  28.      
  29.     if(i<right)                     //продолжаем справа
  30.          sort(arr,i,right);
  31. }
  32.  
  33. int main()
  34. {
  35.     int *arr;
  36.     arr=(int*)malloc(N*sizeof(int));
  37.     srand((unsigned int) time(NULL));
  38.    
  39.     printf("Initial array:\n");
  40.     for(int i=0;i<N;i++)
  41.     {   arr[i]  = rand()%100;
  42.         printf("%5d", arr[i]);
  43.     }
  44.     sort(arr,0,N-1);
  45.    
  46.     printf("\n\nSorted array:\n");
  47.     for(int i=0;i<N;i++)
  48.         printf("%5d", arr[i]);
  49.  
  50.     free(arr);
  51.  
  52.     flushall();
  53.     getchar();
  54.     return 0;
  55. }

Объяснение кода листинга программы

  1. Объединение файлов stdio.h, stdlib.h и time.h для использования функций ввода-вывода, сортировки и работы со временем.
  2. Определение константы N для задания размера массива.
  3. Создание функции swap для обмена значениями двух переменных.
  4. Создание функции sort для сортировки массива методом двусторонней обходной сортировки.
  5. Инициализация массива случайными значениями в функции main.
  6. Вызов функции sort для сортировки массива.
  7. Вывод отсортированного массива в функции main.
  8. Освобождение памяти, выделенной под массив, с помощью функции free.
  9. Ожидание нажатия клавиши для завершения программы.
  10. Возврат значения 0 для успешного завершения программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы