题目描述
给出一个数据序列,使用希尔排序算法进行降序排序。
间隔gap使用序列长度循环除2直到1
输入
第一行输入t,表示有t个测试示例
第二行输入n,表示第一个示例有n个数据(n>1)
第三行输入n个数据,都是正整数,数据之间用空格隔开
以此类推
输出
对每组测试数据,输出每趟排序结果。不同组测试数据间用空行分隔。
样例输入
2
6
111 22 6 444 333 55
8
77 555 33 1 444 77 666 2222
样例输出
444 333 55 111 22 6
444 333 111 55 22 6
444 555 666 2222 77 77 33 1
666 2222 444 555 77 77 33 1
2222 666 555 444 77 77 33 1
提示
#include<iostream> #include<cstring> using namespace std; #define INF 0x7f int n; int array[INF]; void printarray() { for(int i=0;i<n;i++) { if(i!=n-1) cout<<array[i]<<" "; else cout<<array[i]<<endl; } } void Shellsort() { int i,j,gap; int temp; for(gap=n/2;gap>0;gap/=2) { for(i=gap;i<n;i++) { temp=array[i]; for(j=i;j>=gap&&array[j-gap]<temp;j-=gap) { array[j]=array[j-gap]; } array[j]=temp; } printarray(); } } int main() { int T; cin>>T; while(T--) { cin>>n; memset(array,0,sizeof(array)); for(int i=0;i<n;i++) cin>>array[i]; Shellsort(); cout<<endl; } return 0; } //完全仿照直插排序,把1改成gap
原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12183079.html
时间: 2024-11-03 02:21:35