【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四
生活随笔
收集整理的這篇文章主要介紹了
【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
十大經典排序算法系列博客——>傳送門
希爾排序由Shell在1959年發明,又叫縮小增量排序,是第一個突破O(n^2)的排序算法,屬于簡單插入排序的改進版,會優先比較距離較遠的元素。
- 算法步驟:
- 選擇一個增量序列T1,T2,…,Tk, 其中Ti>Tj,Tk=1, i>j;
- 每趟排序,根據對應的增量Ti,將待排序列分割成若干子序列,分別對各子序列進行直接插入排序;
- 按增量序列個數k,對序列進行k趟排序。
- 希爾排序實例:
下圖的增量序列為:5,2,1,第一趟排序將增量為5的子序列進行插入排序,第二趟排序將增量為2的子序列進行插入排序,第三趟將增量為1的子序列進行插入排序,最終完成排序
代碼實現
#include <iostream>using namespace std;int a[] = {70,30,40,10,80,20,90,100,75,60,45};void shell_sort(int a[],int n); int main() {cout<<"Before Sort: ";for(int i=0; i<11; i++)cout<<a[i]<<" ";cout<<endl;shell_sort(a, 11);cout<<"After Sort: ";for(int i=0; i<11; i++)cout<<a[i]<<" ";cout<<endl;system("pause"); }void shell_sort(int a[], int n) {int gap;for(gap = 3; gap >0; gap--){for(int i=0; i<gap; i++){for(int j = i+gap; j<n; j=j+gap){if(a[j]<a[j-gap]){int temp = a[j];int k = j-gap;while(k>=0&&a[k]>temp){a[k+gap] = a[k];k = k-gap;}a[k+gap] = temp;}}}} }總結
以上是生活随笔為你收集整理的【GIF动画+完整可运行源代码】C++实现 希尔排序——十大经典排序算法之四的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【GIF动画+完整可运行源代码】C++实
- 下一篇: 【GIF动画+完整可运行源代码】C++实