zoukankan      html  css  js  c++  java
  • 希尔排序个人理解

    
    

      将整个数组,每次按照2的倍数长度进行比较。先比较前两个,如果第一个比第二个大则进行交换,否则不变。在进行2的倍数比较时,比如四个数进行比较时。先进行前两个数的比较,然后将第三个数
    按照插入排序算法进行插入。

    其算法如下:

    public static void shellSort(int[] array){
                    //数组的长度,用于每次进行2的倍数进行比较和插入排序进行使用
                    int length=array.length;
                    //变量i:将要与前一部分进行比较的后一部分,也是临时变量的下标。
                    //变量j:与后一部分相差h长度的前一部分。
                    //变量temp:用于保存临时变量array[i]
                    //变量h:前一部分与后一部分相差的长度。
                    int i,j,temp,h;
                    //每次将长度减半,减半之后进行比较
                    for(h=length/2;h>0;h=h/2){
                        //从下标为h开始,刚好是第二个将要比较的数
                        for(i=h;i<length;i++){
                            //将比较数保存在临时变量中,用于与前几位数进行比较,如果每次有一个数大于该数
                            //数组上的数都会向后移动一位,最后将该临时变量置于空出的那一个位置。
                            temp=array[i];
                            //数组每次都会进行插入排序比较,隔着距离h
                            for(j=i-h;j>=0;j-=h){
                                //如果临时变量小于前一个用于比较的数位置为j,那么将前一个用于比较的数放置
                                //于后一个数上,位置为j+h,否则退出此次循环。
                                if(temp<array[j]){
                                    array[j+h]=array[j];
                                }else{
                                    break;
                                }
                            }
                            //将临时变量放置于与前几位数比较后的位置
                            array[j+h]=temp;
                        }
                    }
                }
  • 相关阅读:
    Linux内核中的红黑树
    研究UEVENT相关东西,看到2篇优秀的博文,转载与此
    Nor Nand OneNand
    Linux设备模型(总线、设备、驱动程序和类)
    linux驱动的入口函数module_init的加载和释放(转)
    hwclock(Linux)
    Linux块设备驱动
    pdflush内核线程池及其中隐含的竞争
    Nand Flash与Nor Flash
    linux内核I2C体系结构(注意结构体原型)
  • 原文地址:https://www.cnblogs.com/orchid9/p/7611892.html
Copyright © 2011-2022 走看看