//這是快速排序的兩種思想,兩種**思想
#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 ...
快速排序的兩種實現方式
從小 大排序 以首位元素作為基準元素 在起始位置小於結束位置的前提下,先從右到左迴圈陣列元素,如果大於基準元素,則向左移動結束位置的索引,當不滿足迴圈條件的時候,將索引是高位的元素賦予索引為低位的元素 也就是首位元素所在的地方 然後從左到右迴圈陣列元素,如果小於基準元素,則向右移動開始位置的索引,當...