Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int *array;
  5.  
  6. int compare(int i, int j)
  7. {
  8. if (array[i] == array[j]) return 0;
  9. return array[i] < array[j] ? -1 : 1;
  10. }
  11.  
  12. void swap(int i, int j)
  13. {
  14. int t = array[i];
  15. array[i] = array[j];
  16. array[j] = t;
  17. }
  18.  
  19. void selectSort(int l, int r)
  20. {
  21. int i,j,k;
  22. for (j = r; j > l; j--) {
  23. k = j;
  24. i = j - 1;
  25. while (i >= l) {
  26. if (compare(k,i) < 0)
  27. k = i;
  28. i = i - 1;
  29. }
  30. swap(j,k);
  31. }
  32. }
  33.  
  34. int partition(int left, int right)
  35. {
  36. int i,j;
  37. i = left;
  38. for(j = left; j < right; j++) {
  39. if (compare(j,right) < 0) {
  40. swap(i,j);
  41. i++;
  42. }
  43. }
  44. swap(i,right);
  45. return i;
  46. }
  47.  
  48. void qqsort(int m, int left, int right)
  49. {
  50. int b;
  51. while ((left < right) && ((right - left + 1) >= m)){
  52. b = partition(left,right);
  53. qqsort(m,left,b - 1);
  54. left = b + 1;
  55. }
  56. selectSort(left,right);
  57. }
  58.  
  59. int main()
  60. {
  61. int i, n, m;
  62. scanf("%d %d", &n,&m);
  63. array = (int*)calloc(n,sizeof(int));
  64. for (i = 0; i < n; i++) scanf("%d", array + i);
  65. qqsort(m, 0, n - 1);
  66. for (i = 0; i < n; i++) printf("%d ", array[i]);
  67. free(array);
  68. return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement