希尔排序(C++版)
生活随笔
收集整理的這篇文章主要介紹了
希尔排序(C++版)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include <iostream>
#include <vector>
using namespace std;void print(vector<int>& nums){for(auto a: nums){cout<<a<<" ";}cout<<endl;
}//希爾排序的思想是采用插入排序的方法,
//先讓數組中任意間隔為 h 的元素有序,剛開始 h 的大小可以是 h = n / 2,
//接著讓 h = n / 4,讓 h 一直縮小
//當 h = 1 時,也就是此時數組中任意間隔為1的元素有序,此時的數組就是有序的了。void shellSortCore(vector<int>& nums,int gap,int i ){int inserted=nums[i];int j;for(j=i-gap;j>=0&&nums[j]>inserted;j-=gap){// 插入的時候按組進行插入nums[j+gap]=nums[j];}nums[j+gap]=inserted;
}void shellSort(vector<int>& nums){int size=nums.size();if(size<2) return;for(int gap=size/2;gap>=1;gap/=2){//進行分組,最開始的時候,gap為數組長度一半for(int i=gap;i<size;i++){ //對各個分組進行插入分組shellSortCore(nums,gap,i);//將nums[i]插入到所在分組正確的位置上}}
}int main(){vector<int> nums{1,24,67,23,4,78,90,456};shellSort(nums);print(nums);return 0;
}
時間復雜度:O(nlog(n)) O(nlog(n)^2) O(nlog(n)^2)
空間復雜度:O(1)
希爾排序是不穩定的
總結
以上是生活随笔為你收集整理的希尔排序(C++版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 选择排序(C++版)
- 下一篇: 快速排序(C++版)