直接插入排序算法


直接插入排序算法(用於理解)

一個帶排序數組    array[]     元素個數 size = array.length

兩個指針表示元素位置    int i 和 int j

  i 表示待排序元素的位置  ,   j 和 i 相等,為了表示已經排好序的元素位置

快樹排序就是把一個待排元素排進已排好的隊列中,因此需要兩層循環

 

第一層循環 for( i = 1;i < size;i++)   i 表示待排元素的位置,從第二個元素開始所以 i 初始化為1

  循環內部設置 int temp = array[i] ;

  再設置 j = i;  因為這層循環每完成一次,已經排好序的元素就多一個。(為什么j=i 而不是 j = i-1 ,也可以那么賦值,看個人喜好。主要就是表述已經排序好的最后一個元素的位置)

 

第二層循環為找到插入位置  while( j-1 >= 0 && array[j-1] > temp)  表示如果前面還有比 temp 小的元素就繼續循環

  循環內部開始排序   array[j] = array[j-1];   將比 temp 大的那個元素與 temp 交換

  前面還有元素     j -- ;  前面還有沒比較的元素

 

到此算法完成

 

void InsertSort(T* array, int n) {              
	int i, j;                                   
	T temp;                                      /
	for (i = 1; i < n; i++) {                    //待排序元素位置
		j = i;
		temp = array[i];                         
		while (j-1 >= 0 && temp < array[j - 1]) {       //尋找插入位置
			array[j] = array[j - 1];             
			j--;                                 
		}
		array[j] = temp;                       //也可以寫在第二層循環內部。但可以分離出來,也算是提高計算性能。
	} 

  

 

 

總的來說就是 i 記錄待排序的元素位置(第一層循環i++),需要將待排序元素與前一個元素比較,若i前還有比它小的元素則繼續比較(第二層循環 j--)

 

要熟記直接插入排序算法,因為其他插入排序也也會用到直接插入排序


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM