快速排序的兩種常見優化法

2021-10-25 10:44:36 字數 1015 閱讀 9703

優化1:low 到 high之間的資料都小於某個值的時候,採用直接插入排序

優化2:三數取中法

//快速排序的兩種優化

public static void quick(int array,int low,int high)

// 優化法2 三數取中法

medianofthree(array,low,high);

int par = partion(array,low,high);//基準 par

quick(array,low,par-1);

quick(array,par+1,high);

}

// par 劃分

private static int partion(int array, int start, int end)

if (start >=end)else

while (start < end && array[start] <= tmp)

if (start >= end)else

}array[start] = tmp;//start 和 end 相遇 tmp放回 因為分支中都會用到 ,所以提到後面

return start; //此時start下標的值 是 分割值 左邊全小於分割值 右邊全大於分割值

}//優化法1

public static void insertsort2(int array,int low,int high) else

}array[j+1] = tmp;

}}//優化2 三數取中法

private static void medianofthree(int array, int low, int high)

if (array[low] <= array[mid])

if (array[mid] >= array[high])

}//交換函式

public static void swap(int array,int low,int high)

兩種快速排序

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

快速排序的兩種實現

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

快速排序的兩種思路

選取最左端 low 為基準值,以公升序為例 從右向左 high low 查詢到乙個小於基準值的元素,再從左向右查詢乙個大於基準值的元素,再將兩者相交換。while arr j temp low從右向左 high low 查詢到乙個小於基準值的元素,將兩者相交換,再從左向右查詢乙個大於基準值的元素,再...