题目描述
给出一个数据序列,使用希尔排序算法进行降序排序。
间隔gap使用序列长度循环除2直到1
输入
第一行输入t,表示有t个测试示例
第二行输入n,表示第一个示例有n个数据(n>1)
第三行输入n个数据,都是正整数,数据之间用空格隔开
以此类推
输出
对每组测试数据,输出每趟排序结果。不同组测试数据间用空行分隔。
样例查看模式
正常显示查看格式
输入样例1 <-复制
2\n
6\n
111 22 6 444 333 55\n
8\n
77 555 33 1 444 77 666 2222\n
输出样例1
444 333 55 111 22 6\n
444 333 111 55 22 6\n
\n
444 555 666 2222 77 77 33 1\n
666 2222 444 555 77 77 33 1\n
2222 666 555 444 77 77 33 1\n
#include <iostream>
#include <math.h>
using namespace std;
class SeqList{
public:
int size;
int* elem;
SeqList(int s) : size(s){
elem=new int[size=s];
for(int i=0;i<size;i++)
cin>>elem[i];
}
void ShellSort();
void display();
};
void SeqList::ShellSort(){ //shell_sort
for(int gap=size/2;gap>=1;gap/=2){
for(int i=gap;i<size;i++){
int j=i-gap;
int temp=elem[i];
while(j>=0 && elem[j]<temp){
elem[j+gap]=elem[j];
j-=gap;
}
elem[j+gap]=temp;
}
display();
}
cout<<endl;
}
void SeqList::display(){
for(int i=0;i<(size-1);i++){
cout<<elem[i]<<" ";
}
cout<<elem[size-1]<<endl;
}
int main() {
int t,s;
cin>>t;
while(t--){
cin>>s;
SeqList list(s);
list.ShellSort();
}
}