優化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 查詢到乙個小於基準值的元素,將兩者相交換,再從左向右查詢乙個大於基準值的元素,再...