码迷,mamicode.com
首页 > 编程语言 > 详细

Shell排序 C&&C++

时间:2019-11-28 13:24:53      阅读:92      评论:0      收藏:0      [点我收藏+]

标签:顺序   amp   lease   shell   组元   while   result   重复   完成   

Shell排序
 
Shell排序是大量数据需要排序时,更为高效的插入排序。它的算法思想基于插入排序的算法思想
流程:
(1)将n个元素数组分成n/2个数字序列,第一个数据和第n/2个数据为一对,等等,以此类推
(2)一次循环使每一个数对排列好顺序
(3)变成n/4个数对,再次排序。
(4)不断重复上述过程,随着序列减少直至最后变为1个,完成排序。
具体如何怎么排的可以运行代码查看每一步排序。
 
 
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void ShellSort(int *a,int len)
{
    int x,t,j;
    for (int r = len/2; r >=1 ; r/=2)    //外层循环分组
    {
        for (int i = r; i < len; i++)    
        {//内层循环设置一定间距r,分别比较对应元素,当r=1时,这个时候就为插入排序,数组元素数量大时这时效率比插入排序高。
            t=a[i];
            j=i-r;
            while (j>=0&&t<a[j])
            {
                a[j+r]=a[j];
                j-=r;
            }
            a[j+r]=t;
            x++;
            cout<<"Sort result after "<<x<<" step";              //输出每一步排序结果
            for (int k = 0; k < len; k++) cout<<a[k]<<" ";
            cout<<endl;
        }
        
    }
    
}
int main()
{
    srand(time(NULL));
    int n;
    cout<<"Please cin the size of array:"<<endl; //输入数组的大小
    cin>>n;
    int a[n];
    cout<<"Array before sorting:"<<endl;
    for (int i = 0; i < n; i++)            //利用随机数作为数组输入
    {
        a[i]=rand()/1000;
        cout<<a[i]<<" ";
    }
    cout<<endl;
    ShellSort(a,10);
    cout<<"Array after sorting:"<<endl;  //输出排序后的数组
    for (int i = 0; i < 10; i++) cout<<a[i]<<" ";
    cout<<endl;
    return 0; 
    
}

Shell排序 C&&C++

标签:顺序   amp   lease   shell   组元   while   result   重复   完成   

原文地址:https://www.cnblogs.com/Arthas8086/p/11948888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!