快速排序演算法分析

2021-08-21 08:38:11 字數 1711 閱讀 5441

public

class

quicksort

/*** 快速排序主例程

* *@param a 原始陣列

*@param left 起始索引

*@param right 結束索引

*@param

實現了 comparable介面的類或其子類

*/private

static

super anytype>> void

quicksort(anytype a, int left, int right)

// 大元素指標向左推進, 遇到比樞紐元小的元素終止

while (a[--j].compareto(pivot) > 0)

// 兩個索引未交叉時, 代表大小序列還未分割完成, 交換位置後繼續分割

// 交叉時代表分割完成

if (i < j)

swap(a, i, j);

else

break;

}// 分割完成後, 將樞紐元和小元素索引終止處的元素位置互換

// 此時, 樞紐元左側都為小元素, 右側都為大元素 (相對於樞紐元而言)

swap(a, i, right - 1);

// 對分割後的子串行重複上面操作

quicksort(a, left, i - 1);

quicksort(a, i + 1, right);

} else

}/**

* 對陣列的指定部分使用插入排序

*@param a 原始陣列

*@param left 起始索引

*@param right 結束索引

*@param

實現了 comparable介面的型別或其子類

*/private

static

super anytype>> void

insertionsort(anytype a, int left, int right)

anytype tmp;

int j;

for (int i = left + 1; i <= right; i++)

a[j] = tmp;}}

/**三數中值分割法

使用左端, 右端和中心位置上的三個元素的中值作為樞紐元

*/private

static

super anytype>> anytype median3(anytype a, int left, int right)

if (a[right].compareto(a[left]) < 0)

if (a[right].compareto(a[center]) < 0)

// 將樞紐元和右端倒數第二個元素交換位置, 使樞紐元離開陣列, 便於元素比較

swap(a, center, right - 1);

// 將樞紐元返回

return a[right - 1];

}/**

* 交換陣列中兩個元素的位置

*/private

static

super anytype>> void

swap(anytype arr, int i, int j)

anytype tmp = arr[i];

arr[i] = arr[j];

arr[j] = tmp;

}}

排序演算法分析 快速排序

假設有n個元素,現在要把這些元素按照從小到大的順序進行排序,那麼演算法步驟如下,選擇中間位置的元素作為基準值 pivot value 其索引為 0 n 1 2 從第0個元素開始從左往右找到比基準值大的元素,其索引為i從第n 1個元素開始從右往左找到比基準值小的元素,其索引為j交換這兩個元素 從索引i...

快速排序演算法分析

快速排序演算法 include include void quicksort int arr,int nleft,int nright i nleft j nright int nmid nleft nright 2 int nmidval arr nmid while i j from right...

快速排序演算法分析

經常在面試時會有面試官要求直接寫出快速排序演算法,因為該演算法在排序演算法中占有非常重要的地位,它排序效率高,達到o nlogn 最壞的情況也是o n 2 它的思想為對於乙個待排序的序列,首先隨機選取乙個元素作為樞軸,然後通過元素值的比較,將整個序列分成兩部分,前一部分所有元素都小於或等於該樞軸元素...