演算法與資料結構(一) 快速排序

2021-06-26 09:24:35 字數 982 閱讀 6860

原理:

在序列中找乙個基準數,然後,通過一定的次序調整(如交換位置或不斷填坑的方式),使得這個基準數的位置前面的數都小於基準數,後面的數都大於這個基準數,那麼,就找到了這個基準數的位置,然後,不斷地遞迴這個過程。

演算法步驟:

1.找乙個基準數,一般為待排序序列左邊的第乙個,並且把這個位置作為第乙個坑,並儲存好這個數

2.從右往左找出第乙個小於基準數的值,用以填上上面乙個坑,而該值的位置成為乙個新的坑

3.從左往右找出第乙個大於等於基數的值,用以填上上面乙個坑,而該值的位置成為乙個新的坑

4.重複步驟2、3,直至帶排列的序列為空,然後,將步驟1中儲存的數放置到最後的那個坑

5.將以最後的坑的位置為分界,將左右兩邊的構成的序列進行遞迴。

**如下:

#include using namespace std;

void quicksort(int a,int p,int r)

a[i] = a[j];

i++;

while (ip+1) //如果基數的位置和左邊界相鄰,左邊停止遞迴

quicksort(a,p,i-1);

//if(i當輸入的陣列變成

時,就會輸出錯誤結果:

仔細檢查程式才發現,原來是由於在填坑的時候,也就是在執行

a[i] = a[j];

i++;

的時候,並沒有判斷是否是真的找到了a[j]

修改完成後的**如下:

#include using namespace std;

void quicksort(int a,int p,int r)

if(ip+1) //如果基數的位置和左邊界相鄰,左邊停止遞迴

quicksort(a,p,i-1);

//if(i

資料結構與演算法 排序演算法 快速排序

源 cpp view plain copy include void quicksort int int,int intfindposs int int,int intmain quicksort arry,0,6 printf after sorted n for i 0 i 7 i printf...

資料結構與演算法 快速排序

基礎概念 快速排序,聽這個名字就能想到它排序速度比較快方法,是一種分治思想。所謂分治,就是指以乙個數為基準,將序列中的其他數往它兩邊 扔 以從小到大排序為例,比它小的都 扔 到它的左邊,比它大的都 扔 到它的右邊,然後左右兩邊再分別重複這個操作,不停地分,直至分到每乙個分割槽的基準數的左邊或者右邊都...

資料結構與演算法 快速排序

快速排序在實際應用中使用廣泛,效果也高。快排使用的是分治策略,一組序列基於某乙個基準值分成兩個大小的子串行,遞迴排序子串行,最終得到有序的序列。快排的平均時間複雜度為o nlogn 演算法的實現步驟 1.在序列中挑選乙個基準值,我們可以預設第乙個數為基準值 2.從兩邊的數值跟基準值作對比,數值小的放...