小甲魚 排序演算法 快速排序
阿新 • • 發佈:2018-11-11
小甲魚 排序演算法 快速排序
#include <stdio.h> //交換 void swap(int k[], int low, int high) { int temp; temp = k[low]; k[low] = k[high]; k[high] = temp; } //計算基準點的函式 //把將所有小於基準點的所有元素放在基準點的左邊 //把將所有大於基準點的所有元素放在基準點的右邊 int Partition(int k[], int low, int high) { //low和high這裡是指標 int point; point = k[low];//基準點定位第一個元素 //當退出這個迴圈時,low和high接觸在一塊 while (low < high) { //比較右邊 while (low < high && k[high] >= point) { high--; } //比較右邊,如果比基準點少,把基準點傳過去,把小的數傳進來 swap(k, low, high);//需要移動,交換,low相當於point基準點 //比較左邊 while (low < high && k[low] <= point) { low++;//指向下一個 } //如果出了迴圈,出現左邊的大於基準點,該與基準點進行交換 swap(k, low, high);//需要移動,交換 } return low;//返回中間點 } //low起始位置,high結束位置 void QSort(int k[], int low, int high) { int point;//基準點 //左邊的指標和右邊的指標都會移動,當指標重疊的時候,進行一輪比較了 if (low < high) { point = Partition(k, low, high);//基準點的定位 QSort(k, low, point-1);//對左邊進行遞迴呼叫 QSort(k, point+1, high);//對右邊進行遞迴呼叫 } } //外層函式,封裝 void QuickSort(int k[], int n) { //實際的操作函式 //引數:陣列,初始位置,最大元素的位置 QSort(k, 0, n-1); } int main(void) { int i, a[10] = {5, 2, 6, 0, 3, 9, 1, 7, 4, 8}; QuickSort(a, 10); printf("排序後的結果是:"); for(i = 0; i < 10; i++) { printf("%d", a[i]); } printf("\n\n"); return 0; }