選取最左端(low)為基準值,以公升序為例:
從右向左(high-low)查詢到乙個小於基準值的元素,再從左向右查詢乙個大於基準值的元素,再將兩者相交換。
while(arr[j]>=temp&&low從右向左(high-low)查詢到乙個小於基準值的元素,將兩者相交換,再從左向右查詢乙個大於基準值的元素,再將兩者相交換。
while(arr[j]>=temp&&low
注意:選取不同的思路相應的函式結構以及返回值等細節**會有細微的差異,且大部分情況下第二種思路的交換次數要比第一種多。
下面給出二者的完整**:
#includevoid quicksort(int arr,int low,int high)
printf("\n");
*/while(arr[right]>=base && left#includevoid swap(int arr, int low, int high)
/*定位交換元素位置,並返回下一趟排序的最左端元素位置(即基準元素位置)*/
int location(int arr, int low, int high)
swap(arr, low, high);
/*printf("%d,%d\n",low,high);*/
/*for(int i=0 ; i<6 ;i++)
printf("\n");
*/while(low < high && arr[low] <= base)
swap(arr, low, high);
/* printf("%d,%d\n",low,high);*/
/*for(int i=0 ; i<6 ;i++)
printf("\n");*/}
/*printf("%d ,%d\n",low,arr[low]);*/
return low;
}void quicksort(int arr, int low, int high)
}int main()
quicksort(arr, 0, n-1);
for(j = 0; j < n; j ++)
return 0;
}
快速排序的兩種思路(C 實現)
includeusing namespace std int partition int array,int startindex,int endindex void quicksort int array,int startindex,int endindex 分治 雙邊迴圈法 int parti...
兩種快速排序
快排是一種基於交換的排序,氣泡排序 兩兩相鄰作比較,逆序則交換 也是基於交換的排序,快排運用了二分法的思想,每次找乙個哨兵,比哨兵小的放一邊,大的放一邊,這是完成了一趟快排。冒泡 for int i 0 ia j 1 快排一 void quicksort int left,int right if ...
快速排序的兩種實現
快速排序演算法是現在用的最廣的排序演算法,也是效率最高的。它有兩種實現方式,一種是定軸法,另外一種是挖坑法。這裡簡單介紹一下兩種實現方法的思想,並附上c 實現 一 定軸法 1.備份對軸 首記錄 2.取兩個指標left和right,初始值分別是序列的第二個元素和最後乙個元素,並且left right ...