fork download
  1. #include <stdio.h>
  2.  
  3. void swap(int* a, int* b) {
  4. int temp = *a;
  5. *a = *b;
  6. *b = temp;
  7. }
  8.  
  9.  
  10. void partition(int a[], int l, int r, int* l_end, int* r_start) {
  11. int i = l;
  12. int j = r;
  13. int pivot = a[(l + r) / 2];
  14. while (i <= j) {
  15. while (a[i] < pivot) i++;
  16. while (a[j] > pivot) j--;
  17. if (i <= j) {
  18. swap(&a[i], &a[j]);
  19. i++;
  20. j--;
  21. }
  22. }
  23. *l_end = j;
  24. *r_start = i;
  25. }
  26.  
  27. void quickSort(int a[], int l, int r) {
  28. if (l < r) {
  29. int m1, m2;
  30. partition(a, l, r, &m1, &m2);
  31. quickSort(a, l, m1);
  32. quickSort(a, m2, r);
  33. }
  34. }
  35.  
  36. void printArray(int a[], int n) {
  37. for (int i = 0; i < n; i++) {
  38. printf("%d ", a[i]);
  39. }
  40. printf("\n");
  41. }
  42.  
  43. int main() {
  44. int data[] = {7, 2, 9, 4, 3, 6, 1, 8, 5};
  45. int n = sizeof(data) / sizeof(data[0]);
  46.  
  47. printf("ソート前: ");
  48. printArray(data, n);
  49. quickSort(data, 0, n - 1);
  50. printf("ソート後: ");
  51. printArray(data, n);
  52. return 0;
  53. }
Success #stdin #stdout 0.01s 5292KB
stdin
Standard input is empty
stdout
ソート前: 7 2 9 4 3 6 1 8 5 
ソート後: 1 2 3 4 5 6 7 8 9