zoukankan      html  css  js  c++  java
  • 【改良插入排序】

    /*
    说明:
    插入排序法由未排序的后半部分前端取出一个值,插入已排序前半部分的适当位置,概念简单但速度不快。
    排序要加快的基本原则之一,是让后一次的排序进行时,尽量利用前一次排序后的结果,以加快排序的速度,Shell排序法即是基于此一概念来改良
    插入排序法。
    
    解法:
    略 
    */
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<time.h>
    
    #define MAX 10
    #define SWAP(x, y) {int t; t = x; x = y; y = t;}
    
    void shellsort(int[]);
    
    int main(void){
        int number[MAX] = {0};
        int i; 
        
        srand(time(NULL));
        
        printf("排序前: 
    ");
        for(i = 0; i < MAX; i++){
            number[i] = rand() % 100;
            printf("%d ", number[i]);
        }  
        
        shellsort(number);
         
    //    system("pause");
        return 0;
    }
    
    void shellsort(int number[]){
        int i, j, k, gap, t;
        
        gap = MAX / 2;
        
        printf("
    排序后: 
    ");
        while(gap > 0){
            for(k = 0; k < gap; k++){
                for(i = k + gap; i < MAX; i += gap){
                    for(j = i - gap; j >= k; j -= gap){
                        if(number[j] > number[j + gap]){
                            SWAP(number[j], number[j + gap]);
                        }
                        else{
                            break;
                        }
                    } 
                }
            }
            
            printf("
     gap = %d: ", gap);
            for(i = 0; i < MAX; i++){
                printf("%d ", number[i]);
            }
            printf("
    ");
            
            gap /= 2;
        }
    } 

    运行结果:

  • 相关阅读:
    URL的JavaScript解决之道
    JavaScript中Date对象的几个扩展方法
    taobao open
    Linux操作系统的日志说明
    DG常用运维命令及常见问题解决
    oracle系统视图
    oracle 自动备份、恢复功能
    oracle队列
    spring学习笔记
    sql语句拾遗
  • 原文地址:https://www.cnblogs.com/libra-yong/p/6360202.html
Copyright © 2011-2022 走看看