當基準數選擇最左邊的數字時,那麼就應該先從右邊開始搜尋;當基準數選擇最右邊的數字時,那麼就應該先從左邊開始搜尋。不論是從小到大排序還是從大到小排序!快速排序之所比較快,因為相比氣泡排序,每次交換是跳躍式的。每次排序的時候設定乙個基準點,將小於等於基準點的數全部放到基準點的左邊,將大於等於基準點的數全部放到基準點的右邊。這樣在每次交換的時候就不會像氣泡排序一樣每次只能在相鄰的數之間進行交換,交換的距離就大的多了。因此總的比較和交換次數就少了,速度自然就提高了。當然在最壞的情況下,仍可能是相鄰的兩個數進行了交換。因此快速排序的最差時間複雜度和氣泡排序是一樣的都是o(n2),它的平均時間複雜度為o(nlogn)。
//快速排序(從小到大)
vectorquicksort(int left, int right, vector& arr)
;int i, j, base, temp;
i = left, j = right;
base = arr[left]; //取最左邊的數為基準數
while (i < j)
}//基準數歸位
arr[left] = arr[i];
arr[i] = base;
quicksort(left, i - 1, arr);//遞迴左邊
quicksort(i + 1, right, arr);//遞迴右邊
return arr;
}//快速排序(從大到小)
vectorquicksort_1(int left, int right, vector& arr)
;if(left < 0 || right >= arr.size())
;}//非法輸入判斷,防止陣列越界
int i, j, base, temp;
i = left, j = right;
base = arr[left]; //取最左邊的數為基準數
while (i < j)
}//基準數歸位
arr[left] = arr[i];
arr[i] = base;
quicksort_1(left, i - 1, arr);//遞迴左邊
quicksort_1(i + 1, right, arr);//遞迴右邊
return arr;
}int main()
;b = ;
c = quicksort(0,7,a);
d = quicksort_1(0,7,b);
std::cout << c[0]<
}
排序 快速排序,C 實現
本文 的github位址 基本思想 快速排序 是對 氣泡排序 的改進。基本原理 基於分治法,在待排線性表中取乙個元素pivot作為樞軸值,通過一趟排序將待排線性表劃分為獨立的兩部分,第一部分的所有元素小於pivot,第二部分的所有元素大於等於pivot,pivot位於其最終位置。遞迴對兩個子表做快速...
快速排序 c 實現
快速排序思想 基於分治策略,對氣泡排序的一種改進。對於要排序的乙個序列,從中選一值進行排序,將其放入到正確的位置position。然後以position為界,對左右兩部分再做排序。直到劃分的長度為1。步驟 設有一待排序的序列 1.分別設定low hight指向序列的最左端 最右端 從序列中選乙個進行...
快速排序(C 實現)
include using namespace std void swap int a,int b int sort int begin,int end if beginwhile beginif begin return begin void quicksort int begin,int end...