Реализация быстрой сортировки столбцов - C (СИ)

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

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

Помогите реализовать быструю сортировку столбцов не используя функцию qsort. Я вот написал, но ума неприложу, почему не работает. Оно на функции сортировки закливается, аж голова кипит(((
Листинг программы
  1. #include<conio.h>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<search.h>
  5. void createArray(float **a, int m, int n)
  6. {
  7. int i, j;
  8. *a = (float*) malloc(m*n*sizeof(float));
  9. randomize();
  10. for(i=0; i<m; i++)
  11. for(j=0; j<n; j++)
  12. *(*a + i*n + j) = random((101)*100)/(double)100;
  13. }
  14. void printArray(float *a, int m, int n)
  15. {
  16. int i, j;
  17. for(i=0; i<m; i++)
  18. {
  19. for(j=0; j<n; j++)
  20. printf("%-8.2f ", *(a + i*n + j));
  21. printf("\n");
  22. }
  23. }
  24. void qs(float *a, int m, int n, char c)
  25. {
  26. int i, j, nmin, nmax, k=0, pr;
  27. float min, max, temp;
  28. if(c=='+') //po ubyvaniyu - ishem max
  29. {
  30. for(j=0;j<m-2;j++)
  31. {
  32. do
  33. {
  34. pr=1;
  35. max=*(a+n);
  36. for(i=1+k;i<m;i++)
  37. {
  38. if(*(a+i+n)>max)
  39. {
  40. max=*(a+i+n);
  41. nmax=i;
  42. }
  43. }
  44. temp=*(a+k+n);
  45. *(a+k+n)=max;
  46. *(a+nmax+n)=temp;
  47. pr=0;
  48. }
  49. while(!pr);
  50. k++;
  51. }
  52. }
  53. else
  54. {
  55. for(j=0;j<m-2;j++)
  56. {
  57. do
  58. {
  59. pr=1;
  60. min=*(a+n);
  61. for(i=1+k;i<m;i++)
  62. {
  63. if(*(a+i+n)<min)
  64. {
  65. min=*(a+i+n);
  66. nmin=i;
  67. }
  68. }
  69. temp=*(a+k+n);
  70. *(a+k+n)=min;
  71. *(a+nmin+n)=temp;
  72. pr=0;
  73. }
  74. while(!pr);
  75. k++;
  76. }
  77. }
  78. return;
  79. }
  80. void main()
  81. {
  82. float *a;
  83. int m, n, i;
  84. clrscr();
  85. vvod:
  86. printf("Vvedite kol-vo strok:");
  87. scanf("%d",&m);
  88. printf("\nVvedite kol-vo stolbcov:");
  89. scanf("%d",&n);
  90. if((m<1)||(n<1))
  91. {
  92. printf("\nNepravil`nyi vvod!");
  93. goto vvod;
  94. }
  95. createArray(&a,m,n);
  96. printArray(a,m,n);
  97. for(i=0;i<n;i++)
  98. {
  99. if(i%2==0)//esli stolbec nechetnyi togda sortirovat` ego po ubivaniyu. Metodom BYSTROI SORTIROVKI!!!!!
  100. qs(a,m,i,'+');
  101. else
  102. qs(a,m,i,'-');//inache po vozrastaniyu
  103. }
  104. printf("\n\nNazhmite Enter\n\n");
  105. getch();
  106. printArray(a,m,n);
  107. free(a);
  108. getch();
  109. }

Решение задачи: «Реализация быстрой сортировки столбцов»

textual
Листинг программы
  1. #include<conio.h>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<search.h>
  5.  void createArray(int **a, int m, int n)
  6. {
  7.         int i, j;
  8.         *a = (int*) malloc(m*n*sizeof(int));
  9.         randomize();
  10.         for(i=0; i<m; i++)
  11.         for(j=0; j<n; j++)       
  12.        *(*a + i*n + j) = random(100)+1;
  13. }
  14.  
  15. void printArray(int *a, int m, int n)
  16. {
  17.         int i, j;
  18.         for(i=0; i<m; i++)
  19.         {
  20.                 for(j=0; j<n; j++)
  21.                 printf("%-5d ", *(a + i*n + j));
  22.                 printf("\n");
  23.         }
  24. }
  25.  
  26. void qs(int *a, int m, int n, char c, int col_st)
  27. {
  28.         int i, j, nmin, nmax;
  29.         int min, max, temp;
  30.         if(c=='+') //po ubyvaniyu - ishem max
  31.         {
  32.                 for(j=0;j<m-1;j++)
  33.                 {
  34.                         {
  35.                                 max=*(a+n+col_st*j);
  36.                                 nmax=j;
  37.                                 for(i=1+j;i<m;i++)
  38.                                 {
  39.                                         if(*(a+i*col_st+n)>max)
  40.                                         {
  41.                                                 max=*(a+i*col_st+n);
  42.                                                 nmax=i;
  43.                                         }
  44.                                 }
  45.                                 temp=*(a+n+col_st*j);
  46.                                 *(a+n+col_st*j)=max;
  47.                                 *(a+nmax*col_st+n)=temp;
  48.                         }
  49.                        // k++;
  50.                 }
  51.         }
  52.         else
  53.         {
  54.                 for(j=0;j<m-1;j++)
  55.                 {
  56.                         {
  57.                                 min=*(a+n+col_st*j);
  58.                                 nmin=j;
  59.                                 for(i=1+j;i<m;i++)
  60.                                 {
  61.                                         if(*(a+i*col_st+n)<min)
  62.                                         {
  63.                                                 min=*(a+i*col_st+n);
  64.                                                 nmin=i;
  65.                                         }
  66.                                 }
  67.                                 temp=*(a+n+col_st*j);
  68.                                 *(a+n+col_st*j)=min;
  69.                                 *(a+nmin*col_st+n)=temp;
  70.                         }
  71.                      //   k++;
  72.                 }
  73.         }
  74.         return;
  75. }
  76.  
  77. void main()
  78. {
  79.         int *a;
  80.         int m, n, i;
  81.         clrscr();
  82.         vvod:
  83.         printf("Vvedite kol-vo strok:");
  84.         scanf("%d",&m);
  85.         printf("\nVvedite kol-vo stolbcov:");
  86.         scanf("%d",&n);
  87.         if((m<1)||(n<1))
  88.         {
  89.                 printf("\nNepravil`nyi vvod!");
  90.                 goto vvod;
  91.         }
  92.         createArray(&a,m,n);
  93.         printArray(a,m,n);
  94.         for(i=0;i<n;i++)  
  95.         {
  96.                 if(i%2==0)//esli stolbec nechetnyi togda sortirovat` ego po ubivaniyu. Metodom BYSTROI SORTIROVKI!!!!!
  97.                 qs(a,m,i,'+', n);
  98.                 else
  99.                 qs(a,m,i,'-', n);//inache po vozrastaniyu
  100.         }
  101.         printf("\n\nNazhmite Enter\n\n");
  102.         getch();
  103.         printArray(a,m,n);
  104.         free(a);
  105.         getch();
  106. }

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

Вот что получилось:

  1. Ввод количества строк и столбцов.
  2. Создание массива случайных целых чисел.
  3. Вывод этого массива на экран.
  4. Быстрая сортировка столбцов по возрастанию (отрицательное значение c).
  5. Быстрая сортировка столбцов по убыванию (положительное значение c).
  6. Ввод от пользователя символа, обозначающего операцию (либо «+», либо «-»).
  7. Вывод отсортированного массива на экран.
  8. Завершение работы программы.

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


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

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

12   голосов , оценка 4.333 из 5

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

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

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