#include <iostream> #include <cstdio> #include <cstdlib> #include <ctime> using namespace std; /* v[i]とv[j]を交換する */ void swap(int v[], int i, int j) { int temp; temp = v[i]; v[i] = v[j]; v[j] = temp; } /* v[left]...v[right]を昇順にソートする */ void qsort(int v[], int left, int right) { if (left >= right) { return; } swap(v, left, (left + right) / 2); int last = left; for (int i = left + 1; i <= right; i++) { if (v[i] < v[left]) { swap(v, ++last, i); } } swap(v, left, last); qsort(v, left, last - 1); qsort(v, left + 1, right); } /* Qソートの検証 */ int main() { srand((unsigned int)time(NULL)); int arr[100]; cout << "ソート前" << endl; for (int i = 0; i < 100; i++) { arr[i] = rand() % 1000; cout << arr[i] << ","; if (i % 10 == 9) { cout << endl; } } cout << endl; qsort(arr,0, 99); cout << "ソート後" << endl; for (int i = 0; i < 100; i++) { cout << arr[i] << ","; if (i % 10 == 9) { cout << endl; } } cout << endl; return 0; }
ソート前 115,698,151,448,33,900,416,328,189,823, 170,859,778,776,284,397,962,577,61,395, 391,484,288,562,488,177,480,616,624,542, 696,474,228,503,590,574,244,374,697,810, 723,876,929,292,570,913,734,347,778,105, 443,662,113,616,860,828,631,846,86,579, 0,950,262,293,93,612,812,336,503,982, 273,533,75,92,136,108,261,602,857,453, 294,886,11,146,391,221,579,411,147,947, 584,618,983,114,673,776,846,506,569,528, ソート後 0,11,33,61,75,86,92,93,105,108, 113,114,115,136,146,147,151,170,177,189, 221,228,244,261,262,273,284,288,292,293, 294,328,336,347,374,391,391,395,397,411, 416,443,448,453,474,480,484,488,503,503, 506,528,533,542,562,569,570,574,577,579, 579,584,590,602,612,616,616,618,624,631, 662,673,696,697,698,723,734,776,776,778, 778,810,812,823,828,846,846,857,859,860, 876,886,900,913,929,947,950,962,982,983,