• c: Sorting Algorithms


    SortAlgorithm.h

    1. /*****************************************************************//**
    2. * \file SortAlgorithm.h
    3. * \brief 业务操作方法
    4. * VSCODE c11 https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/2.selectionSort.md
    5. * https://www.programiz.com/dsa/counting-sort
    6. * https://www.geeksforgeeks.org/sorting-algorithms/
    7. * \author geovindu,Geovin Du
    8. * \date 2023-09-19
    9. ***********************************************************************/
    10. #ifndef SORTALGORITHM_H
    11. #define SORTALGORITHM_H
    12. #include
    13. #include
    14. /**
    15. * @brief 1。Bubble Sort冒泡排序法
    16. * @param data INT 数组
    17. * @param lensize 数组长度
    18. *
    19. * @return 排序好的数组
    20. *
    21. *
    22. */
    23. int* BubbleSort(int* arrdata,int lensize);
    24. /**
    25. * @brief 2 C Program for Selection Sort 选择排序
    26. * @param arrdata INT 数组int arrdata[]
    27. * @param lensize 数组长度
    28. *
    29. * @return 返回说明
    30. *
    31. *
    32. */
    33. void SelectionSort(int* arrdata, int lensize);
    34. /**
    35. * @brief 3 Insertion Sort插入排序
    36. * @param arrdata INT 数组int arrdata[]
    37. * @param lensize 数组长度
    38. *
    39. * @return 返回说明
    40. *
    41. *
    42. */
    43. void InsertionSort(int* arrdata, int lensize);
    44. /**
    45. * @brief 4 Quick Sort 快速排序
    46. * @param arrdata INT 数组
    47. * @param start 数组长度开始值
    48. * @param end 数组长度结束值
    49. * @return 返回说明
    50. *
    51. *
    52. */
    53. void QuickSort(int* arrdata, int start, int end);
    54. /**
    55. * @brief 5 Merge Sort 合并排序
    56. * @param arrdata INT 数组
    57. * @param start 数组长度开始值
    58. * @param end 数组长度结束值
    59. * @return 返回说明
    60. *
    61. *
    62. */
    63. void MergeSort(int* arrdata, int const begin, int const end);
    64. /**
    65. * @brief 6 Counting Sort 计数排序
    66. * @param arrdata INT 数组
    67. * @param lensize 数组长度
    68. * @return 返回说明
    69. *
    70. *
    71. */
    72. void CountingSort(int* arrdata, int lensize);
    73. /**
    74. * @brief 7 Radix Sort 基数排序
    75. * @param arrdata INT 数组
    76. * @param lensize 数组长度
    77. * @return 返回说明
    78. *
    79. *
    80. */
    81. void Radixsort(int* arrdata, int lensize);
    82. /**
    83. * @brief 8 Bucket Sort 桶排序
    84. * @param arrdata INT 数组
    85. * @return 返回说明
    86. *
    87. *
    88. */
    89. void BucketSort(int* arrdata);
    90. /**
    91. * @brief 9 Heap Sort 堆排序
    92. * @param arrdata INT 数组
    93. * @return 返回说明
    94. *
    95. *
    96. */
    97. void HeapSort(int* arrdata, int lensize);
    98. /**
    99. * @brief 10 Shell Sort 希尔排序
    100. * @param arrdata INT 数组
    101. * @param lensize 数组长度
    102. * @return 返回说明
    103. *
    104. *
    105. */
    106. void ShellSort(int* arrdata, int lensize);
    107. #endif //SORTALGORITHM_H

    SortAlgorithm.c

    1. /*****************************************************************//**
    2. * \file SortAlgorithm.c
    3. * \brief c Sorting Algorithms 业务操作方法
    4. * VSCODE c11 https://stackoverflow.com/questions/71924077/configuring-task-json-and-launch-json-for-c-in-vs-code
    5. * https://www.programiz.com/dsa/counting-sort
    6. * https://www.geeksforgeeks.org/sorting-algorithms/
    7. * 安装插件“Doxygen Documentation Generator”,用来生成注释。
    8. * 安装插件”C/C++ Snippets”,用来生成文件头、代码块分割线等。
    9. * \author geovindu,Geovin Du
    10. * \date 2023-09-19
    11. ***********************************************************************/
    12. #include
    13. #include
    14. #define MAXSIZE 100
    15. /**
    16. * @brief 1。Bubble Sort冒泡排序法
    17. * @param arrdata INT 数组
    18. * @param lensize 数组长度
    19. *
    20. * @return 排序好的数组
    21. *
    22. *
    23. */
    24. int* BubbleSort(int* arrdata,int lensize)
    25. {
    26. int i,j,tmp;
    27. int* newdate;
    28. /* 原始数据 */
    29. //int lensize=sizeof(data) / sizeof(data [0]);//sizeof(data); //sizeof(data) / sizeof(data[0]);//
    30. printf("2共 長度是:%d ",lensize);
    31. printf("冒泡排序法:\n原始数据为:");
    32. for (i=0;i
    33. printf("%3d",arrdata[i]);
    34. printf("\n");
    35. for (i=(lensize-1);i>=0;i--) /* 扫描次数 */
    36. {
    37. for (j=0;j/*比较、交换次数*/
    38. {
    39. if (arrdata[j]>arrdata[j+1]) /* 比较相邻两数,如第一个数较大则交换 */
    40. {
    41. tmp=arrdata[j];
    42. arrdata[j]=arrdata[j+1];
    43. arrdata[j+1]=tmp;
    44. }
    45. }
    46. printf("第 %d 次排序后的结果是:",lensize-i); /*把各次扫描后的结果打印出来*/
    47. for (j=0;j
    48. printf("%3d",arrdata[j]);
    49. printf("\n");
    50. }
    51. //printf("最终排序的结果为:");
    52. for (i=0;i
    53. //newdate[i]=data[i];
    54. printf("%3d",arrdata[i]);
    55. printf("\n");
    56. return arrdata;
    57. }
    58. void swap(int *a,int *b) //交換兩個變數
    59. {
    60. int temp = *a;
    61. *a = *b;
    62. *b = temp;
    63. }
    64. /**
    65. * @brief 2 C Program for Selection Sort 选择排序
    66. * @param arrdata INT 数组
    67. * @param size 数组长度
    68. *
    69. * @return 返回说明
    70. * -false fail
    71. * -true succeedS
    72. */
    73. void SelectionSort(int* arrdata, int len)
    74. {
    75. int i,j;
    76. for (i = 0 ; i < len - 1 ; i++)
    77. {
    78. int min = i;
    79. for (j = i + 1; j < len; j++) //走訪未排序的元素
    80. if (arrdata[j] < arrdata[min]) //找到目前最小值
    81. min = j; //紀錄最小值
    82. swap(&arrdata[min], &arrdata[i]); //做交換
    83. }
    84. }
    85. /**
    86. * @brief 3 Insertion Sort插入排序
    87. * @param arrdata INT 数组int arrdata[]
    88. * @param size 数组长度
    89. *
    90. * @return 返回说明
    91. *
    92. *
    93. */
    94. void InsertionSort(int* arrdata, int size){
    95. // defining some iterables and variables
    96. int i, temp, j;
    97. // using the for-loop
    98. for (i = 1; i < size; i++){
    99. // initializing the temp variable as value at index i from array
    100. temp = arrdata[i];
    101. // initializing another iterable value
    102. j = i - 1;
    103. // using the while loop for j >= 0 and arr[j] > temp
    104. while (j >= 0 && arrdata[j] > temp){
    105. // swapping the elements
    106. arrdata[j + 1] = arrdata[j];
    107. j = j - 1;
    108. }
    109. arrdata[j + 1] = temp;
    110. }
    111. }
    112. void qswap(int* a, int* b)
    113. {
    114. int t = *a;
    115. *a = *b;
    116. *b = t;
    117. }
    118. int partition(int arrdata[], int low, int high)
    119. {
    120. // Choosing the pivot
    121. int pivot = arrdata[high];
    122. // Index of smaller element and indicates
    123. // the right position of pivot found so far
    124. int qi = (low - 1);
    125. for (int j = low; j <= high - 1; j++) {
    126. // If current element is smaller than the pivot
    127. if (arrdata[j] < pivot) {
    128. qi++;
    129. qswap(&arrdata[qi], &arrdata[j]);
    130. }
    131. }
    132. qswap(&arrdata[qi + 1], &arrdata[high]);
    133. return (qi + 1);
    134. }
    135. /**
    136. * @brief 4 Quick Sort 快速排序
    137. * @param arrdata INT 数组int arrdata[]
    138. * @param low 数组长度开始值
    139. * @param high 数组长度结束值
    140. * @return 返回说明
    141. *
    142. *
    143. */
    144. void QuickSort(int* arrdata, int low, int high){
    145. if (low < high) {
    146. // pi is partitioning index, arr[p]
    147. // is now at right place
    148. int pi = partition(arrdata, low, high);
    149. // Separately sort elements before
    150. // partition and after partition
    151. QuickSort(arrdata, low, pi - 1);
    152. QuickSort(arrdata, pi + 1, high);
    153. }
    154. }
    155. void merge(int array[], int const left, int const mid,
    156. int const right)
    157. {
    158. int const subArrayOne = mid - left + 1;
    159. int const subArrayTwo = right - mid;
    160. // Create temp arrays
    161. int* leftArray =(int*)malloc(subArrayOne);// int [subArrayOne];
    162. int* rightArray = (int*)malloc(subArrayTwo);//int [subArrayTwo];
    163. // Copy data to temp arrays leftArray[] and rightArray[]
    164. for (int i = 0; i < subArrayOne; i++)
    165. leftArray[i] = array[left + i];
    166. for (int j = 0; j < subArrayTwo; j++)
    167. rightArray[j] = array[mid + 1 + j];
    168. int indexOfSubArrayOne = 0;
    169. int indexOfSubArrayTwo = 0;
    170. int indexOfMergedArray = left;
    171. // Merge the temp arrays back into array[left..right]
    172. while (indexOfSubArrayOne < subArrayOne
    173. && indexOfSubArrayTwo < subArrayTwo) {
    174. if (leftArray[indexOfSubArrayOne]
    175. <= rightArray[indexOfSubArrayTwo]) {
    176. array[indexOfMergedArray]
    177. = leftArray[indexOfSubArrayOne];
    178. indexOfSubArrayOne++;
    179. }
    180. else {
    181. array[indexOfMergedArray]
    182. = rightArray[indexOfSubArrayTwo];
    183. indexOfSubArrayTwo++;
    184. }
    185. indexOfMergedArray++;
    186. }
    187. // Copy the remaining elements of
    188. // left[], if there are any
    189. while (indexOfSubArrayOne < subArrayOne) {
    190. array[indexOfMergedArray]
    191. = leftArray[indexOfSubArrayOne];
    192. indexOfSubArrayOne++;
    193. indexOfMergedArray++;
    194. }
    195. // Copy the remaining elements of
    196. // right[], if there are any
    197. while (indexOfSubArrayTwo < subArrayTwo) {
    198. array[indexOfMergedArray]
    199. = rightArray[indexOfSubArrayTwo];
    200. indexOfSubArrayTwo++;
    201. indexOfMergedArray++;
    202. }
    203. //delete[] leftArray;
    204. //delete[] rightArray;
    205. }
    206. /**
    207. * @brief 5 Merge Sort 合并/归并排序
    208. * @param arrdata INT 数组
    209. * @param start 数组长度开始值
    210. * @param end 数组长度结束值
    211. * @return 返回说明
    212. *
    213. *
    214. */
    215. void MergeSort(int* arrdata, int const begin, int const end)
    216. {
    217. if (begin >= end)
    218. return;
    219. int mid = begin + (end - begin) / 2;
    220. MergeSort(arrdata, begin, mid);
    221. MergeSort(arrdata, mid + 1, end);
    222. merge(arrdata, begin, mid, end);
    223. }
    224. /**
    225. * @brief 6 Counting Sort 计数排序
    226. * @param arrdata INT 数组
    227. * @param size 数组长度
    228. * @return 返回说明
    229. *
    230. *
    231. */
    232. void CountingSort(int* arrdata, int size) {
    233. int output[10];
    234. // Find the largest element of the array
    235. int max = arrdata[0];
    236. for (int i = 1; i < size; i++) {
    237. if (arrdata[i] > max)
    238. max = arrdata[i];
    239. }
    240. // The size of count must be at least (max+1) but
    241. // we cannot declare it as int count(max+1) in C as
    242. // it does not support dynamic memory allocation.
    243. // So, its size is provided statically.
    244. int count[10];
    245. // Initialize count array with all zeros.
    246. for (int i = 0; i <= max; ++i) {
    247. count[i] = 0;
    248. }
    249. // Store the count of each element
    250. for (int i = 0; i < size; i++) {
    251. count[arrdata[i]]++;
    252. }
    253. // Store the cummulative count of each array
    254. for (int i = 1; i <= max; i++) {
    255. count[i] += count[i - 1];
    256. }
    257. // Find the index of each element of the original array in count array, and
    258. // place the elements in output array
    259. for (int i = size - 1; i >= 0; i--) {
    260. output[count[arrdata[i]] - 1] = arrdata[i];
    261. count[arrdata[i]]--;
    262. }
    263. // Copy the sorted elements into original array
    264. for (int i = 0; i < size; i++) {
    265. arrdata[i] = output[i];
    266. }
    267. }
    268. int getMax(int array[], int n) {
    269. int max = array[0];
    270. for (int i = 1; i < n; i++)
    271. if (array[i] > max)
    272. max = array[i];
    273. return max;
    274. }
    275. void radcountingSort(int array[], int size, int place) {
    276. int output[size + 1];
    277. int max = (array[0] / place) % 10;
    278. for (int i = 1; i < size; i++) {
    279. if (((array[i] / place) % 10) > max)
    280. max = array[i];
    281. }
    282. int count[max + 1];
    283. for (int i = 0; i < max; ++i)
    284. count[i] = 0;
    285. // Calculate count of elements
    286. for (int i = 0; i < size; i++)
    287. count[(array[i] / place) % 10]++;
    288. // Calculate cumulative count
    289. for (int i = 1; i < 10; i++)
    290. count[i] += count[i - 1];
    291. // Place the elements in sorted order
    292. for (int i = size - 1; i >= 0; i--) {
    293. output[count[(array[i] / place) % 10] - 1] = array[i];
    294. count[(array[i] / place) % 10]--;
    295. }
    296. for (int i = 0; i < size; i++)
    297. array[i] = output[i];
    298. }
    299. /**
    300. * @brief 7 Radix Sort 基数排序
    301. * @param arrdata INT 数组
    302. * @param size 数组长度
    303. * @return 返回说明
    304. *
    305. *
    306. */
    307. void Radixsort(int* arrdata, int size) {
    308. // Get maximum element
    309. int max = getMax(arrdata, size);
    310. // Apply counting sort to sort elements based on place value.
    311. for (int place = 1; max / place > 0; place *= 10)
    312. radcountingSort(arrdata, size, place);
    313. }
    314. //这个数是有规则的
    315. #define NARRAY 9 // Array size 7
    316. #define NBUCKET 8 // Number of buckets 6
    317. #define INTERVAL 12 // Each bucket capacity 10
    318. struct Node {
    319. int data;
    320. struct Node *next;
    321. };
    322. struct Node *BucketInsertionSort(struct Node *list);
    323. //void printBuckets(struct Node *list);
    324. int getBucketIndex(int value);
    325. /**
    326. * @brief 8 Radix Sort 基数排序
    327. * @param arrdata INT 数组
    328. * @return 返回说明
    329. * -false fail
    330. * -true succeed
    331. */
    332. void BucketSort(int* arrdata) {
    333. int i, j;
    334. struct Node **buckets;
    335. // Create buckets and allocate memory size
    336. buckets = (struct Node **)malloc(sizeof(struct Node *) * NBUCKET);
    337. // Initialize empty buckets
    338. for (i = 0; i < NBUCKET; ++i) {
    339. buckets[i] = NULL;
    340. }
    341. // Fill the buckets with respective elements
    342. for (i = 0; i < NARRAY; ++i) {
    343. struct Node *current;
    344. int pos = getBucketIndex(arrdata[i]);
    345. current = (struct Node *)malloc(sizeof(struct Node));
    346. current->data = arrdata[i];
    347. current->next = buckets[pos];
    348. buckets[pos] = current;
    349. }
    350. // Print the buckets along with their elements
    351. //for (i = 0; i < NBUCKET; i++) {
    352. //printf("Bucket[%d]: ", i);
    353. //printBuckets(buckets[i]);
    354. //printf("\n");
    355. //}
    356. // Sort the elements of each bucket
    357. for (i = 0; i < NBUCKET; ++i) {
    358. buckets[i] = BucketInsertionSort(buckets[i]);
    359. }
    360. //printf("-------------\n");
    361. //printf("Bucktets after sorting\n");
    362. // for (i = 0; i < NBUCKET; i++) {
    363. //printf("Bucket[%d]: ", i);
    364. //printBuckets(buckets[i]);
    365. //printf("\n");
    366. // }
    367. // Put sorted elements on arr
    368. for (j = 0, i = 0; i < NBUCKET; ++i) {
    369. struct Node *node;
    370. node = buckets[i];
    371. while (node) {
    372. arrdata[j++] = node->data;
    373. node = node->next;
    374. }
    375. }
    376. return;
    377. }
    378. struct Node* BucketInsertionSort(struct Node *list) {
    379. struct Node *k, *nodeList;
    380. if (list == 0 || list->next == 0) {
    381. return list;
    382. }
    383. nodeList = list;
    384. k = list->next;
    385. nodeList->next = 0;
    386. while (k != 0) {
    387. struct Node *ptr;
    388. if (nodeList->data > k->data) {
    389. struct Node *tmp;
    390. tmp = k;
    391. k = k->next;
    392. tmp->next = nodeList;
    393. nodeList = tmp;
    394. continue;
    395. }
    396. for (ptr = nodeList; ptr->next != 0; ptr = ptr->next) {
    397. if (ptr->next->data > k->data)
    398. break;
    399. }
    400. if (ptr->next != 0) {
    401. struct Node *tmp;
    402. tmp = k;
    403. k = k->next;
    404. tmp->next = ptr->next;
    405. ptr->next = tmp;
    406. continue;
    407. } else {
    408. ptr->next = k;
    409. k = k->next;
    410. ptr->next->next = 0;
    411. continue;
    412. }
    413. }
    414. return nodeList;
    415. }
    416. int getBucketIndex(int value) {
    417. return value / INTERVAL;
    418. }
    419. void printBuckets(struct Node *list) {
    420. struct Node *cur = list;
    421. while (cur) {
    422. printf("%d ", cur->data);
    423. cur = cur->next;
    424. }
    425. }
    426. void heapify(int arr[], int n, int i) {
    427. // Find largest among root, left child and right child
    428. int largest = i;
    429. int left = 2 * i + 1;
    430. int right = 2 * i + 2;
    431. if (left < n && arr[left] > arr[largest])
    432. largest = left;
    433. if (right < n && arr[right] > arr[largest])
    434. largest = right;
    435. // Swap and continue heapifying if root is not largest
    436. if (largest != i) {
    437. swap(&arr[i], &arr[largest]);
    438. heapify(arr, n, largest);
    439. }
    440. }
    441. /**
    442. * @brief 9 Heap Sort 堆排序
    443. * @param arrdata INT 数组
    444. * @return 返回说明
    445. *
    446. *
    447. */
    448. void HeapSort(int* arrdata, int n) {
    449. // Build max heap
    450. for (int i = n / 2 - 1; i >= 0; i--)
    451. heapify(arrdata, n, i);
    452. // Heap sort
    453. for (int i = n - 1; i >= 0; i--) {
    454. swap(&arrdata[0], &arrdata[i]);
    455. // Heapify root element to get highest element at root again
    456. heapify(arrdata, i, 0);
    457. }
    458. }
    459. /**
    460. * @brief 10 Shell Sort 希尔排序
    461. * @param arrdata INT 数组
    462. * @param n 数组长度
    463. * @return 返回说明
    464. *
    465. *
    466. */
    467. void ShellSort(int* arrdata, int n) {
    468. // Rearrange elements at each n/2, n/4, n/8, ... intervals
    469. for (int gap = n/2; gap > 0; gap /= 2)
    470. {
    471. // Do a gapped insertion sort for this gap size.
    472. // The first gap elements a[0..gap-1] are already in gapped order
    473. // keep adding one more element until the entire array is
    474. // gap sorted
    475. for (int i = gap; i < n; i += 1)
    476. {
    477. // add a[i] to the elements that have been gap sorted
    478. // save a[i] in temp and make a hole at position i
    479. int temp = arrdata[i];
    480. // shift earlier gap-sorted elements up until the correct
    481. // location for a[i] is found
    482. int j;
    483. for (j = i; j >= gap && arrdata[j - gap] > temp; j -= gap)
    484. arrdata[j] = arrdata[j - gap];
    485. // put temp (the original a[i]) in its correct location
    486. arrdata[j] = temp;
    487. }
    488. }
    489. /*
    490. for (int interval = n / 2; interval > 0; interval /= 2) {
    491. for (int i = interval; i < n; i += 1) {
    492. int temp = array[i];
    493. int j;
    494. for (j = i; j >= interval && array[j - interval] > temp; j -= interval) {
    495. array[j] = array[j - interval];
    496. }
    497. array[j] = temp;
    498. }
    499. }
    500. */
    501. }

    调用:

    1. /*
    2. * @Author: 涂聚文 geovindu,Geovin Du
    3. * @Date: 2023-09-11 14:07:29
    4. * @LastEditors:
    5. * @LastEditTime: 2023-09-20 14:35:49
    6. * @FilePath: \testcpp\helloword.c
    7. * @Description:
    8. */
    9. /*****************************************************************//**
    10. * \file helloworld.C
    11. * \brief 业务操作方法
    12. * VSCODE c11 安装插件“Doxygen Documentation Generator”,用来生成注释。
    13. 安装插件”C/C++ Snippets”,用来生成文件头、代码块分割线等。KoroFileHeader
    14. C/C++ Snippets插件设置
    15. * \author geovindu,Geovin Du
    16. * \date 2023-09-19
    17. ***********************************************************************/
    18. #include
    19. #include
    20. #include
    21. #include "include/SortAlgorithm.h"
    22. int main()
    23. {
    24. printf("hello world, c \n");
    25. printf("你好,中国\n");
    26. int i;
    27. int *p;
    28. char str[20];
    29. //1冒泡排序
    30. int data[12]={60,50,39,27,12,8,45,63,20,2,10,88}; /* 原始数据 */
    31. int lensize=sizeof(data) / sizeof(data [0]);//sizeof(data);
    32. p=BubbleSort(data,lensize);
    33. //itoa(lensize, str, 10);
    34. //printf("1共長度是 %d ",lensize);
    35. printf("\n1冒泡排序的结果为:");
    36. for (i=0;i
    37. printf("%3d",p[i]);
    38. printf("\n");
    39. //2选择排序
    40. int arr[] = { 64, 25, 12, 22, 11,88,28,100 };
    41. int n = sizeof(arr) / sizeof(arr[0]);
    42. selectionSort(arr, n);
    43. int ii;
    44. printf("2选择排序结果为:");
    45. for(ii = 0; ii < n; ii++)
    46. printf("%d ", arr[ii]);
    47. printf("\n");
    48. //3插入排序
    49. int inarr[] = {25, 23, 28, 16, 18,100,8,99};
    50. // calculating the size of array
    51. int size = sizeof(inarr) / sizeof(inarr[0]);
    52. printf("3插入排序结果为:");
    53. InsertionSort(inarr, size);
    54. for(ii = 0; ii < n; ii++)
    55. printf("%d ", inarr[ii]);
    56. printf("\n");
    57. //4快速排序
    58. // defining and initializing an array
    59. int qsarr[] = {100,25, 23, 28, 16, 18,8,99,3,20};
    60. printf("4快速排序结果为:");
    61. // calculating the size of array
    62. size = sizeof(qsarr) / sizeof(qsarr[0]);
    63. QuickSort(qsarr, 0, size - 1);
    64. for (int i = 0; i < size; i++)
    65. printf("%d ", qsarr[i]);
    66. printf("\n");
    67. //5 合并排序
    68. printf("5合并排序结果为:");
    69. int mearr[] = { 12, 11, 23, 55, 6, 57,3,100,9 };
    70. int arr_size = sizeof(mearr) / sizeof(mearr[0]);
    71. MergeSort(mearr, 0, arr_size - 1);
    72. for (int i = 0; i < arr_size; i++)
    73. printf("%d ", mearr[i]);
    74. printf("\n");
    75. //6 计数排序
    76. printf("6计数排序结果为:");
    77. int carray[] = {4, 2, 2, 8, 3, 3, 1};
    78. int cn = sizeof(carray) / sizeof(carray[0]);
    79. CountingSort(carray, cn);
    80. for (int i = 0; i < cn; i++)
    81. printf("%d ", carray[i]);
    82. printf("\n");
    83. //7. 基数排序
    84. printf("7基数排序结果为:");
    85. int rarray[] = {121, 432, 564, 23, 1, 45, 788};
    86. int rn = sizeof(rarray) / sizeof(rarray[0]);
    87. Radixsort(rarray, rn);
    88. for (int i = 0; i < rn; i++)
    89. printf("%d ", rarray[i]);
    90. printf("\n");
    91. //8 Bucket Sort 桶排序
    92. printf("8桶排序结果为:");
    93. int barray[] = {42, 32, 33, 5,52, 37,100, 47, 51};
    94. BucketSort(barray);
    95. int bn = sizeof(barray) / sizeof(barray[0]);
    96. for (int i = 0; i < bn; i++)
    97. printf("%d ", barray[i]);
    98. printf("\n");
    99. //9堆排序
    100. printf("9堆排序结果为:");
    101. int harr[] = {1, 12, 9, 5, 6, 10};
    102. int hn = sizeof(harr) / sizeof(harr[0]);
    103. HeapSort(harr, hn);
    104. for (int i = 0; i < hn; i++)
    105. printf("%d ", harr[i]);
    106. printf("\n");
    107. //10.希尔排序
    108. printf("10.希尔排序结果为:");
    109. int sdata[] = {9, 8, 3, 7, 25, 6, 4, 11,38};
    110. int ssize = sizeof(sdata) / sizeof(sdata[0]);
    111. ShellSort(sdata, ssize);
    112. for (int i = 0; i < ssize; i++)
    113. printf("%d ", sdata[i]);
    114. printf("\n");
    115. //system("pause"); liunx 无效,win 下使用
    116. return 0;
    117. }

  • 相关阅读:
    HTTP四种请求方式,状态码,请求和响应报文
    流程管理与商务智能解决方案(62页PPT)
    如何让你的Node.js应用程序处理数百万的API请求
    我找到了一个快速定位SpringBoot接口超时问题的神器
    数字中继线功能介绍
    flutter系列之:在flutter中使用相机拍摄照片
    应用软件安全编程--23避免使用不安全的操作模式
    期末前端web大作业——我的家乡陕西介绍网页制作源码HTML+CSS+JavaScript
    【云原生之Docker实战】使用Docker部署jpress开源网站
    PCL入门(四):kdtree简单介绍和使用
  • 原文地址:https://blog.csdn.net/geovindu/article/details/133147379