八大排序演算法之(三)插入排序 折半插入排序

2021-08-09 10:16:54 字數 848 閱讀 7169

折半插入排序演算法原理:把乙個新的元素插入已經拍好順序的陣列的過程中,尋找插入位置時,將待插入區域的首元素設定為a[left],末元素設定為a[right],比較時,將待插入元素與a[mid],其中mid=(left+right)/2相比較,如果比參考元素小,則選擇a[left]到a[mid-1]為新的插入區域(即right=m-1),否則選擇a[mid+1]到a[right]為新的插入區域(即left=mid+1),如此直至left<=right不成立,即將此位置之後所有元素後移一位,並將新元素插入a[right+1]。

與直接插入排序不同的是,折半插入排序比直接插入排序明顯減少了關鍵字之間的比較次數,但是移動次數是沒有改變。所以,折半插入排序和插入排序的時間複雜度相同都是o(n^2),但其減少了比較次數,所以該演算法仍然比直接插入排序好。

折半插入排序演算法實現:

#includeusing namespace std;

templatevoid binaryinsertsort(t& target,t1)

else if (target[mid] > temp)

else

}// (相對大的資料)left及其後面的資料順序向後移動,並把當前值插入在left位置

for (int j = i; j > left; j--)

target[left] = temp;

} }return;

}int main()

; binaryinsertsort(a, a[0]);

for (int i = 0; i < 6; i++)

return 0;

}

這是一種穩定的排序方法

排序過程中資料在記憶體中

八大排序演算法之插入排序

所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。排序演算法,就是如何使得記錄按照要求排列的方法。排序演算法在很多領域得到相當地重視,尤其是在大量資料的處理方面。乙個優秀的演算法可以節省大量的資源。在各個領域中考慮到資料的各種限制和規範,要得到乙個符合實際的優秀...

八大排序演算法之插入排序

排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。先上圖 我先從上往下挨個介紹 1 插入排序 插入排序時間複雜度最優為 o n 情況是陣列為已經排好的順序 最差為o n 2 情況為陣列為排好的逆序 平均...

八大排序之插入排序

插入排序基本思想是每一步將乙個待排序的記錄,插入到前面已經排好序的有序序列中去,直到插完所有元素為止。1.時間複雜度 插入演算法,就是保證前面的序列是有序的,只需要把當前數插入前面的某乙個位置即可。所以如果陣列本來就是有序的,則陣列的最好情況下時間複雜度為o n 如果陣列恰好是倒 倒序,比如原始陣列...