本文將介紹三種排序演算法--插入排序,希爾排序,堆排序。本文所有例子都是使用公升序
一.插入排序
演算法思想
維護乙個有序陣列,將要插入的資料與有序陣列自最後乙個元素直到合適位置的數一一比較。
eg: 有序陣列:1,3,5,6,7 現在待插入資料為2,那麼他將會和7,6,5,3,依次作比較,當帶插入資料小於有序陣列最後的元素大小,則將該元素後移,直到待插入元素找到合適位置為止。
**實現
void insertsort(int* a, int size)
a[end + 1] = tmp;
}}
總結
2.插入排序的時間複雜度為o(n^2);
3.插入排序的空間複雜度為o(1);
4.具有穩定性
排序演算法的穩定性是指,經過排序演算法排序的相同元素的相對位置不會發生改變。
二.希爾排序
演算法思想
希爾排序可以認為是插入排序的增強版,因為,他加入了乙個預排的過程,即在實現間距為1的插入演算法之前,他已經預先將間距為gap(gap一直減減直到》0)的陣列排列過了。所以,當進行gap = 1的插入排序之前使得待排序陣列已經高度接近有序,使得這次進行的gap = 1的排序的時間複雜度,可以小於o(n^2)(gap = 1的插入排序,最好情況的時間複雜度為o(1),前面的預排過程正是出於這個目的)。
**實現
//希爾排序
void shellsort(int* a,size_t size)
a[end + gap] = tmp;
} --gap;
}}
總結
1.希爾排序預排的思想和插入排序的思想是一致的,只是,他把原陣列分成不同的區間。
2.希爾排序的時間複雜度為o(n^2),空間複雜度為o(1);
3,具有不穩定性
三.堆排序
演算法思想
}總結
1.時間複雜度為o(n*lgn),空間複雜度為o(1);
2.具有不穩定性
以上就是本人在學習過程中的一些經驗總結。當然,本人能力有限,難免會有紕漏,希望大家可以指正。
本文出自 「做乙個小小小司機」 部落格,請務必保留此出處
插入排序 希爾插入排序
本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...
排序 插入排序,希爾排序
基本思想 每一步將乙個待排序的元素,按其排序碼的大小,插入到前面已經排好序的序列的合適位置上,直到元素全部插入完畢。直接插入排序 空間複雜度 o 1 時間複雜度 o n n 穩定性 穩定 使用場景 對於一組有序的序列,想插入乙個資料。插入排序的優化 使用二分查詢找到合適的插入位置 折半插入排序 vo...
氣泡排序,插入排序,堆排序,歸併排序,希爾排序
感謝姥姥提供模板 感謝姥姥 展示 include include using namespace std 氣泡排序 void bubble sort int arr,int n 插入排序 void insertionsort int arr,int n arr i tmp 希爾排序 void she...