fork download
  1. #include <stdio.h>
  2.  
  3. // 配列の要素を交換する関数
  4. void swap(int *a, int *b) {
  5. int temp = *a;
  6. *a = *b;
  7. *b = temp;
  8. }
  9.  
  10. // クイックソートのパーティション処理
  11. int partition(int arr[], int low, int high) {
  12. int pivot = arr[high]; // ピボットを最後の要素に設定
  13. int i = low - 1; // 小さい要素の位置
  14.  
  15. for (int j = low; j < high; j++) {
  16. if (arr[j] <= pivot) {
  17. i++;
  18. swap(&arr[i], &arr[j]);
  19. }
  20. }
  21. // ピボットを正しい位置に移動
  22. swap(&arr[i + 1], &arr[high]);
  23. return i + 1;
  24. }
  25.  
  26. // クイックソートの再帰関数
  27. void quicksort(int arr[], int low, int high) {
  28. if (low < high) {
  29. int pi = partition(arr, low, high);
  30.  
  31. // ピボットの左右で再帰ソート
  32. quicksort(arr, low, pi - 1);
  33. quicksort(arr, pi + 1, high);
  34. }
  35. }
  36.  
  37. // 配列の内容を表示する関数
  38. void print_array(int arr[], int size) {
  39. for (int i = 0; i < size; i++) {
  40. printf("%d ", arr[i]);
  41. }
  42. printf("\n");
  43. }
  44.  
  45. // メイン関数
  46. int main() {
  47. int data[10];
  48. printf("10個の整数を入力してください:\n");
  49. for (int i = 0; i < 10; i++) {
  50. scanf("%d", &data[i]);
  51. }
  52.  
  53. quicksort(data, 0, 9);
  54.  
  55. printf("ソート後の配列:\n");
  56. print_array(data, 10);
  57.  
  58. return 0;
  59. }
  60.  
Success #stdin #stdout 0.01s 5288KB
stdin
67
61
68
60
50
92
92
93
35
92
stdout
10個の整数を入力してください:
ソート後の配列:
35 50 60 61 67 68 92 92 92 93