statement:本篇內(nèi)容只是建立在我目前經(jīng)驗的基礎(chǔ)之上趋惨,必然有不完善甚至是不正確的地方邑跪,請謹(jǐn)慎閱讀粉铐,如果能指出錯誤與不足之處藐吮,更是不甚感激
PS1:代碼部分將使用Java語言進(jìn)行展示
PS2:本節(jié)排序算法基于順序表排序
一溺拱、原理
- 把一個待排序的元素插入到一個已經(jīng)有順序的序列(使用時可以把第一個元素看成是有序的)之中(尋找插入點(diǎn)的過程是一個直接的遍歷對比的過程,故稱為“直接”插入排序)
- 假設(shè)待排序隊列長度為length谣辞,簡單可知迫摔,上述過程需要進(jìn)行l(wèi)ength-1次,順序表的話泥从,還有一步將其他元素向后移動的操作
二句占、代碼
- Java代碼
public static void simpleInsertSortASC(int[] sortArray) {
for(int i = 1 ; i < sortArray.length ; i++) {//循環(huán)length-1次
int j = i;
int temp = sortArray[i];//記錄下要插入的元素
for(;j > 0 && temp < sortArray[j-1]; j--) {
//檢測要插入的元素是否大于索引j-1指向的元素,如果大于則在j處插入躯嫉,如果小于則將j-1處的元素向后移動
sortArray[j] = sortArray[j-1];
}
sortArray[j] = temp;
//System.out.println(Arrays.toString(sortArray));
}
}
- C代碼
void simpleInsertSortASC(int *sortArray){
//這里的數(shù)組0號元素存儲的是數(shù)組長度
for(int i = 2 ; i <= sortArray[0] ; i++) {
int j = i;
int temp = sortArray[i];
for(; j > 0 && temp < sortArray[j-1] ; j--){
sortArray[j] = sortArray[j-1];
}
sortArray[j] = temp;
}
}
三纱烘、時間復(fù)雜度
最差的情況是完全逆序的情況,大概可知時間復(fù)雜度是O(n2)
參考文檔:
[1] [數(shù)據(jù)結(jié)構(gòu)C語言版 -- 清華大學(xué)出版社]