經典算法--希爾排序

希爾排序又稱縮小增量排序,是插入排序的改進版本,最壞時間複雜度和平均時間複雜度都是nlog2 n(不一定)

目前並沒有找到一種最好的增量序列。


/*希爾排序,選擇的序列爲9,5,3,2,1
	公式爲dlta[k]=2^(t-k)+1*/
#include<stdio.h>
const int NUM=10;
void shellInsert(int array[],const int length,int dk){//這裏實際上就是一個插入排序
	int i,j,tmp;
	for(i=dk;i<length;i+=dk){
		tmp=array[i];
		for(j=i-dk;j>=0&&tmp<array[j];j-=dk)
			array[j+dk]=array[j];
		array[j+dk]=tmp;
	}
}
void shellSort(int array[],const int length){
	int dk[5]={9,5,3,2,1};//增量數組
	for(int i=0;i<5;i++)
		shellInsert(array,length,dk[i]);
}
int main(){
	int array[NUM]={1,3,5,7,9,0,8,6,4,2};
	shellSort(array,NUM);
	for(int i=0;i<NUM;i++){
		printf("%d ",array[i]);
	}
}
	


轉載請標明出處,原文http://blog.csdn.net/ccy0815ccy

發佈了37 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章