C 快速(二分法)排序

2021-08-26 06:36:42 字數 896 閱讀 3126

快速(二分法)排序的思想是將陣列劃分為兩邊,以某個節點v為界(設這個節點的值為 v),在節點v左邊的所有元素都小於 v, 在節點v右邊的所有元素都大於v.

這樣不停地劃分,到最後整個陣列就是有序的了。

具體分成兩邊的思路為(起始下標為start, 結束下標為 end):

選擇v = a[end]作為中介點

先從start開始掃瞄,遇到a[++i] < v停下來,接著從end開始掃瞄a[--j] > v停下來,交換a[i]和a[j]

接著從i+1開始掃瞄,另一邊接著從j-1開始掃瞄。注意邊界條件if (i >= j) break; 掃瞄完成後就找到了v應該放得位置,交換swap(ref a[i], ref a[end]);這樣就完成了一次劃分。

該演算法的平均時間複雜度為nlgn,最壞的情況是n的平方。該演算法適合使用於大資料量的排序:

using system; using system.collections.generic; using system.linq; using system.text; namespace quicksort ; quicksort(a, 0, a.length-1); for (int i = 0; i < a.length; i++) console.read(); } static void quicksort(int a, int start, int end) return; } if (end - start == 0) i = partition(a, start, end); if (i > start) if (i < end) } static int partition(int a, int start, int end) swap(ref a[i], ref a[end]); return i; } static void swap(ref int a, ref int b) } }

二分法快速排序

我在實現二分法快速排序的時候,最初的程式是這樣的。include using namespace std void qsort int arr,int left,int right while l r arr l value l if arr l value while l r arr l valu...

二分法排序C

首先說一下二分法排序的原理,演算法思想簡單描述 在插入第i個元素時,對前面的0 i 1元素進行折半,先跟他們 中間的那個元素比,如果小,則對前半再進行折半,否則對後半 進行折半,直到left right,然後再把第i個元素前1位與目標位置之間 的所有元素後移,再把第i個元素放在目標位置上。二分法排序...

二分法 選擇排序 快速排序

最近看了 演算法 覺得很棒,做一些總結記錄。coding utf 8 import random author chenk class algorithme def init self self.low 0 self.high 10000 def get random num self return...