排序——希尔排序

来源:互联网 发布:淘宝千里眼怎么安装 编辑:程序博客网 时间:2024/06/05 18:46

    以前不是很理解希尔排序,现在才弄清楚,希尔排序是基于直接插入排序的,只不过每次增量不同罢了。

    

#include <cstdio>using namespace std;#define MAX_NUM100int data[MAX_NUM];//希尔排序void shell_sort(int d , int N ){int i = 0 ;for( i = 0 ; i<d; i++){int j ;for( j = i ; j <N ; j+=d){//开始插入排序int tmp = data[j];int m , n ;for( m = i ; m < j ; m+=d){if(tmp<data[m]){//开始向后搬移for( n = j -d ; n >=m ; n-=d){data[n+d] = data[n];}break;}}data[m] = tmp ;}}for( i = 0 ; i<N ; i++){printf("%d " , data[i]);}printf("\n");}int main(void){int N ;int  i ;int d[] = {5 , 3  , 1};#ifdef DEBUGfreopen("input.txt" , "r"  ,stdin);freopen("output.txt" , "w" , stdout);#endifscanf("%d" , &N);for( i = 0 ; i<N ; i++){scanf("%d"  , &data[i]);}for( i = 0 ; i<3 ; i++){shell_sort(d[i] , N);}return 0 ;}

0 0
原创粉丝点击