希尔排序:时间复杂度:它的时间复杂度和数组初始排序有关
#include "iostream"
#include "vector"
using namespace std;
shell_sort(vector<int> &a,int len){
int step=len/2; //首次步长为len/2
int j;
int temp; //储存临时变量
while(step){ //当步长为0事,排序就完成了
for(int i=step;i<len;i++){ //
temp=a[i]; //先储存第i个变量
j=i-step;
while(j>=0&&a[j]>temp){//比较 确定j的下标大于0 比较第i-nstep与第i个元素的大小
a[j+step]=a[j]; //如果大于 就把这个元素与后面的元素覆盖
j-=step; //直到找到小于临时值得数字 此时的位置就是排序后的位置
} //同时吧temp的值插入在这
a[j+step]=temp;
}
step=step/2;
}
}
int main(){
int a[]={11,22,65,78,99,42,53,23,24};
vector<int> arr;
for(int i=0;i<sizeof(a)/sizeof(int);i++){
arr.push_back(a[i]);
}
shell_sort(arr,arr.size());
for(int i=0;i<arr.size();i++){
cout<<arr[i]<<" " ;
}
return 0;
}