排序算法之希尔排序算法---c++实现

看了一下希尔排序算法的思想,终于可以自己用代码把它写出来。代码虽然冗长,但总的来说,基本能把希尔排序的思体现出来。

总的思想是:把一个数据集合依次进行减半分组,然后分别对每组进行直接插入排序。

#include<iostream>
using namespace std;
void ShellSort(int arry[], int n)
{
 int i, j, gap;
 int k, temp, l;
 for (gap = n / 2; gap > 0; gap /= 2)  //取步长
 {
  for (i = 0; i < gap; i++)  //进行gap次直接插入排序
  {
   for (j = i + gap; j < n; j += gap)
   {
    k = j - gap;
    temp = arry[j];
    //从小到大进行排序
    while (k >= 0 && arry[j] < arry[k])
     k -= gap;
    //到这一步,说明找到插入的位置(k + gap)了
    //移动插入
    for (l = j - gap; l > k; l -= gap)
     arry[l + gap] = arry[l];
    arry[k+gap] = temp;
   }
  }
 }
}
int main()
{
 cout << "排序前的数据为:";
 int a[10], i;
 for (i = 0; i < 10; i++)
 {
  a[i] = rand() % 10 + 1;
  cout << a[i] << " ";
 }
 cout << endl;
 cout << "排序后的数据为:";
 ShellSort(a, 10);
 for (i = 0; i < 10; i++)  
  cout << a[i] << " ";
 cout << endl;
 return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值