關於常用排序演算法的乙個總結

2022-02-06 22:18:55 字數 2579 閱讀 6948

前段時間被人問到排序演算法,今天特此總結一下,冒泡,選擇,快排,歸併,插入這五種排序演算法。

1.選擇排序

選擇排序是整體對比,每次選出你最需要的那個值,比如以下**,首先選出最小的值,從小實現從小到大排序,外迴圈一次,內部迴圈記錄下最小的座標,只發生一次交換,它是一種穩定的排序演算法,時間複雜度為o(n2),核心**如下:

int numberarray = ;

int arraylength = numberarray.length;

int temp = 0;

for (int i = 0; i < arraylength - 1; i++)

}if (i != k)

} system.out.println(arrays.tostring(numberarray));

2.氣泡排序

氣泡排序的核心思路是相鄰元素進行對比,把大的數往後移,外迴圈一次,內部迴圈可能會發生很多次交換,它是一種穩定的演算法,時間複雜度為o(n2),核心**如下:

int numberarray = ;

int arraylength =numberarray.length;

int temp = 0;

for (int i = 0; i < arraylength - 1; i++) }}

system.out.println(arrays.tostring(numberarray));

3.插入排序

插入排序通過預設乙個正確的位置,然後尋找插入位置,有點像我們完鬥地主時,會把連牌挨著大小放著,它也是一種穩定的排序演算法,時間複雜度為o(n2),核心**如下:

int numberarray = ;

for (int i = 1; i < numberarray.length; i++)

numberarray[j] = target;

} system.out.println(arrays.tostring(numberarray));

4.快速排序

快速排序的核心是冒泡+二分+遞迴分治,實際應用中算是最好的排序演算法了,但它是一種不穩定的排序演算法,平均時間複雜度為o(nlgn),最壞的情況是o(n2),它和冒泡演算法的區別是同時查詢大的數和小的數,核心**如下:

public static void main(string args) ;

recursionsort(numberarray, 0, numberarray.length - 1);

system.out.println(arrays.tostring(numberarray));

} catch (exception ex)

} private static void recursionsort(int numberarray, int low, int high)

} private static int partitiongroup(int numberarray, int low, int high)

//// 交換比基準值小的到左邊

numberarray[low] = numberarray[high];

while (low < high && numberarray[low] <= basevalue)

//// 互動比基準值大的到右邊

numberarray[high] = numberarray[low];

} //// 掃瞄完成,左右下標,即low=high

numberarray[low] = basevalue;

//// 返回基準值的下標

return low;

}

5.歸併排序

理論上歸併排序的效率應該高於快速排序,但是由於賦值次數較多以及分配臨時陣列等,所以和快排的效率應該不相上下。它的思路就是把原始陣列序列不斷兩兩分塊,直到每乙個塊只剩下乙個元素,然後利用遞迴的原理合併即可,它是一種穩定的排序演算法,時間複雜度為o(n2),核心**如下:

public static void main(string args) ;

partition(numberarray, 0, numberarray.length - 1);

} catch (exception ex)

} public static void partition(int a, int low, int high)

} public static void merge(int numberarray, int low, int mid, int high) else

} // 把左邊剩餘的數移入陣列

while (i <= mid)

// 把右邊邊剩餘的數移入陣列

while (j <= high)

// 把新陣列中的數覆蓋nums陣列

for (int k2 = 0; k2 < temp.length; k2++)

}

關於快速排序演算法的乙個實現

快速排序的意思就是說,對於乙個陣列,隨機從陣列中選取乙個值,然後將陣列裡的其他值與選中的值進行比較,小於選中的值的放在左側,大於選中的值的,放在右側。將選中的數放在中間。對於左邊和右邊的部分分別重複這個過程直到每次處理乙個或者兩個值,全部結束後認為排序完成。以下是實現演算法 public void ...

5個常用的排序演算法總結

基本思想 插入排序就是每一步都將乙個待排資料按其大小插入到已經排序的資料中的適當位置,直到全部插入完畢。void insertsort vector nums 基本思想 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序...

乙個關於遞迴的演算法。

從鍵盤輸入乙個整數 1 20 則以該數字為矩陣的大小,把1,2,3 n n 的數字按照順時針螺旋的形式填入其中。例如 輸入數字2,則程式輸出 1 24 3輸入數字3,則程式輸出 1 2 3 8 9 4 7 6 5 輸入數字4,則程式輸出 1 2 3 4 12 13 14 5 11 16 15 6 1...