C語言實現快速排序

2021-08-20 08:26:32 字數 1063 閱讀 7115

快速排序

方法:從左邊開始找比基準值大的元素,從右邊找比基準值小的元素,交換兩個元素

缺點:如果所給元素序列為逆序的,那麼快速排序的時間複雜度很糟糕。

長序列對遞迴排序來說不友好。

時間複雜度:平均o(nlogn),最壞o(n)

空間複雜度:最壞o(n);

穩定性:不穩定排序

int _quicsort(int arr, int beg, int end)

int left = beg;

int right = end;

int key = arr[right];//基準值

while (left < right)

while (left < right&&arr[right] >= key)

if (left < right)

} //最後把基準值和left指向的位置交換

swap(&arr[left], &arr[end]);

return left;

}void quicsort(int arr, int beg,int end)

int mid = _quicsort(arr, beg,end);

quicsort(arr, beg, mid-1);

quicsort(arr, mid + 1, end);

}

2.挖坑法

和上面的**基本一樣,不同點_quicsort函式實現上

int _quicsort(int arr, int beg, int end)

int left = beg;

int right = end;

int key = arr[end];

while (left < right)

if (left < right)

while (left < right&&arr[right] >= key)

if (left < right)

} arr[left] = key;

return left;

}

C語言實現快速排序

快速排序,是氣泡排序的改進,通過尋找 中間元素 在一趟排序中,把比 中間元素 小的數放到左邊,比 中間元素 大的數放到右邊,如此遞迴,最終得到排序結果。include define num 5 void quick sort int a,int left,int right void swap in...

c語言實現快速排序

快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽結束...

快速排序 C語言實現

以前使用rm時,ruby指令碼提供乙個sort函式,可以把陣列進行排序,後來得知採用的演算法是快速排序。隨著資料結構課程的學習,快速排序如今也不再神秘,如下 using namespace std void quicksort int a,int low,int high int first low...