希尔排序算法

希尔排序算法

   很多情况下需要用到一些基础的排序算法,接下来分析希尔排序算法

          1.把数组R[n]元素分为d=n/2组,d由元素距离为d的放在一个组;

             2.对每组组内元素进行直接插入排序

             3.d=d/2,d>0时,继续执行第一二步

      一、构图分析:    

                                            
     二、 代码实现:
#include<iostream>
#include<iomanip>
using namespace std;
typedef char  KeyType;//自定义需要排序数组类型 
void shellQueue(KeyType R[],int n)
{
	int i;
	int j;
	KeyType temp;
	int gap;
	gap  = n/2;//初始化增量的值 
	while(gap > 0)
	{
	for( i = gap; i < n; i++ )//对所有间隔gap的元素进行直接插入排序 
	{
		temp = R[i];
		j = i - gap;
		while(j > 0 && temp < R[j])//对相隔gap位置的元素进行排序 
		{
			R[j+gap] = R[j];
			j = j - gap;
		}
		R[j+gap] = temp;
	}
	gap = gap/2;//减小增量 
	}
	cout<<"用希尔排序算法得到的序列:"<<endl; 
	for( i = 0; i < n; i++)
	{
		cout<<R[i];//格式化输出 
	 } 
 } 
int main()
{
	char a[4]={'a','b','c','d'};
	shellQueue(a,4); 
	return 0;
 } 
     
     三、算法分析:
            比直接插入排序快很多,具体为:
               时间复杂度:o(n^1.3)
               空间复杂度:o(1)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值