C語言快速排序原始碼
阿新 • • 發佈:2018-12-16
首先上原始碼:
#include <stdio.h> #include <stdlib.h> #define NUM 20 int partition(int arr[], int low, int high) { int key = arr[low];//選擇中樞數 while (low < high) { //從陣列高位向低位移動,把小於中樞數的高位數放在低位 while (low < high&&arr[high] >= key) { high--; } if (low < high) { arr[low] = arr[high]; low++; } //從陣列的低位向高位移動,把大於中樞數的高位數放在高位 while (low < high&&arr[low] <= key) { low++; } if (low < high) { arr[high] = arr[low]; high--; } } //把中樞數放在高低數的中間 arr[low] = key; return low; } void quick_sort(int arr[], int start, int end) { int pos; if (start < end) { //第一次劃分好高低數 pos = partition(arr, start, end); //分別對高低數部分進行遞迴排序 quick_sort(arr, start, pos - 1); quick_sort(arr, pos + 1, end); } } int main(void) { int i = 0; int arr[NUM] = { 50,12,67,43,100,78,34,1,67,50, 89,34,55,78,47.89,0,109,34,34 };//排序的陣列 printf("排序前:"); for (i = 0; i < NUM; i++) printf("%d, ", arr[i]); quick_sort(arr, 0, NUM - 1); printf("\n排序後:"); for (i = 0; i < NUM; i++) printf("%d, ", arr[i]); printf("\n"); system("pause"); return 0; }
執行結果:
至於具體的排序過程,我就不畫圖了,建議使用除錯功能監視陣列中資料的變化,畢竟做為一個學程式的人,連除錯程式都不會就很尷尬了,下面是除錯流程。
設斷點,執行到斷點處:
對陣列和變數進行監視: