選擇排序
思路:
直接插入排序是一種最簡(jiǎn)單的排序方法,它的基本操作是將一個(gè)記錄插入到已排好的有序的表中,從而得到一個(gè)新的、數(shù)量增1的有序表。
當(dāng)前元素的前面元素均為有序,要插入時(shí),從當(dāng)前元素的左邊開(kāi)始往前找(從后往前找),比當(dāng)前元素大的元素均往右移一個(gè)位置,最后把當(dāng)前元素放在它應(yīng)該呆的位置就行了。
可以想象斗地主右手接牌插入左手已經(jīng)整理好順序的牌的情景,即將一個(gè)牌,從左->右比較,插入到合適位置。
復(fù)雜度分析:
時(shí)間復(fù)雜度為O(n^2)。是穩(wěn)定的排序方法。
package com.itstyle.seckill.common.algorithm;
/**
* 直接插入排序
*/
public class InsertSort {
/**
* 直接插入排序算法
*/
public static void insertSort(int[] list) {
int len = list.length ;
// 從無(wú)序序列中取出第一個(gè)元素 (注意無(wú)序序列是從第二個(gè)元素開(kāi)始的)
for (int i = 1; i < len; i++) {
int temp = list[i];
int j;
// 遍歷有序序列
// 如果有序序列中的元素比臨時(shí)元素大,則將有序序列中比臨時(shí)元素大的元素依次后移
for (j = i - 1; j >= 0 && list[j] > temp; j--) {
list[j + 1] = list[j];
}
// 將臨時(shí)元素插入到騰出的位置中
list[j + 1] = temp;
}
}
}