快速排序的兩種具體實現

2021-06-18 23:58:13 字數 960 閱讀 9267

//這是快速排序的兩種思想,兩種**思想

#include #include int partition(int a,int p,int r)

} tmp=a[i+1];

a[i+1]=a[r];

a[r]=tmp;

return i+1;

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

int main()

; int b=;

int i;

//printf("partitiion2 is %d\r\n",partition2(b,0,11));

quicksort2(b,0,11);

for(i=0;i<12;i++)

printf("%d\r\n",b[i]);

return 0;

}

其中quicksort2是最原始的思想做法。

第一種:

關鍵的地方在於partition這個函式,這是乙個去頂位置的函式,每次使用陣列的最後乙個元素最為主元(key=a[r])。使用這個主元將陣列分為兩部分,右邊是比主元大的元素,左邊是比主元小的元素。首先變數有i、j、p、r,i是記錄左邊最後乙個比主元小的元素,初始值為p-1,j從陣列開始位置p一直查詢到陣列倒數第二個元素r-1,如果其中某個元素a[j]<=key,先將i++,然後置換a[i]和a[j],等到迴圈結束,a[r]和a[i+1]置換,然後返回i+1。但是在遞迴呼叫的時候注意,a[q]是沒有用的。

第二種:

這種思想就是在查詢位置的時候從兩頭開始,左邊開始找比第乙個比主元大的元素,右邊查詢第乙個比主元小的元素,如果左邊的位置i比右邊的位置j小,那麼置換這兩個值,否則返回j。在遞迴的時候,不能忽略查詢的位置關鍵字。

快速排序的兩種實現

快速排序演算法是現在用的最廣的排序演算法,也是效率最高的。它有兩種實現方式,一種是定軸法,另外一種是挖坑法。這裡簡單介紹一下兩種實現方法的思想,並附上c 實現 一 定軸法 1.備份對軸 首記錄 2.取兩個指標left和right,初始值分別是序列的第二個元素和最後乙個元素,並且left right ...

兩種快速排序

快排是一種基於交換的排序,氣泡排序 兩兩相鄰作比較,逆序則交換 也是基於交換的排序,快排運用了二分法的思想,每次找乙個哨兵,比哨兵小的放一邊,大的放一邊,這是完成了一趟快排。冒泡 for int i 0 ia j 1 快排一 void quicksort int left,int right if ...

快速排序的兩種實現方式

從小 大排序 以首位元素作為基準元素 在起始位置小於結束位置的前提下,先從右到左迴圈陣列元素,如果大於基準元素,則向左移動結束位置的索引,當不滿足迴圈條件的時候,將索引是高位的元素賦予索引為低位的元素 也就是首位元素所在的地方 然後從左到右迴圈陣列元素,如果小於基準元素,則向右移動開始位置的索引,當...