• 希尔排序的简单实例


    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define MAXlen 100
    
    /*
    算法思想简单描述:先将要排序的一组数按某个增量 d分成若干组,每组中记录的下
    标相差 d。对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组
    中再进行排序。当增量减到 1时,整个要排序的数被分成一组,排序完成。下面的函
    数是一个希尔排序算法的一个实现,初次取序列的一半为增量,以后每次减半,直到
    增量为 1,希尔排序是不稳定的。
    */
    
    void shell_sort(int *x, int n) {   // 希尔排序
    	int h, j, k, t;
    	for (h = n / 2; h > 0; h = h / 2) { /*控制增量*/
    		for (j = h; j < n; j++) { 
    			t = *(x + j);
    			for (k = j - h; (k >= 0 && t < *(x + k)); k -= h) {
    				*(x + k + h) = *(x + k);
    			}
    			*(x + k + h) = t;
    		}
    	}
    }
    
    int main() {
    	int i;
    	int iArr[MAXlen];
    	srand((unsigned int)time(NULL));
    	printf("
    排序前:
    ");
    	for(i = 0 ; i < MAXlen ; i++) {
    		iArr[i] = (unsigned int)rand() % 1000;
    		if(i % 10 == 0) printf("%
    ");
    		printf("%5d",iArr[i]);
    	}
    	printf("
    ");
    	shell_sort(iArr,MAXlen);
    	printf("
    排序后:
    ");
    	for(i = 0 ; i < MAXlen ; i++) {
    		if(i % 10 == 0) printf("%
    ");
    		printf("%5d",iArr[i]);
    	}
    	printf("
    
    ");
    	return 0;
    }
    

      

  • 相关阅读:
    Java核心技术点之动态代理
    一起写一个Android图片加载框架
    Java核心技术点之注解
    Android中的Intent Filter匹配规则介绍
    阿里客户端工程师试题简析——Android应用的闪退(crash)分析
    Android开发之高效加载Bitmap
    Java NIO:浅析I/O模型
    深入探索Android中的Handler
    git常用命令
    SM2
  • 原文地址:https://www.cnblogs.com/ledao/p/3366349.html
Copyright © 2020-2023  润新知