zoukankan      html  css  js  c++  java
  • 常用排序算法

    存储结构

    邻接矩阵(Adjacency Matrix)

    邻接链表(Adjacency List)

    十字链表(Orthogonal List)

    算法

    插入、冒泡、选择排序、希尔排序

    public class InsertSort {
        @Test
        public  void testInsertSort()
        {
            int[] array={4,6,7,3,9,8,5,2};
            this.insSort(array);
            for(int i=0;i<array.length;i++)
            {
                System.out.println(array[i]);
            }
        }
    
        /**
         * 插入排序
         * 1、将第一个元素标记为已排序
         * 2、遍历每个没有排过序的元素
         * 2.1、提取元素x,如果提取的元素x < 排序过的元素则交换(循环一直跳出)
         * @param array
         */
        private void insSort(int[] array)
        {
            for(int i=1;i<array.length;i++)
            {
                int j=i;
                while (j > 0 && array[j] < array[j - 1]) {
                        int tmp = array[j];
                        array[j] = array[j - 1];
                        array[j - 1] = tmp;
                        j--;
                }
            }
        }
    
    }
    /**
         * 冒泡
         *  对相邻元素进行两两比较,顺序相反,则交换
         * @param array
         */
        private void bubbleSort(int[] array)
        {
            for(int i=0;i<array.length-1;i++)
            {
                for(int j=0;j<array.length-1-i;j++)
                {
                    if(array[j]>array[j+1])
                    {
                        int tmp=array[j];
                        array[j]=array[j+1];
                        array[j+1]=tmp;
                    }
                }
            }
        }
    
      /**
         * 每一趟从待排序的数字中选择最小的放在已排序内容的最后,直到全部内容排序完成
         * @param array
         */
        private void selectionSort(int[] array){
            for(int i=0;i<array.length-1;i++)
            {
                int min=i;
                for(int j=i+1;j<array.length;j++)
                {
                    if(array[j]<array[min])
                    {
                        min=j;
                    }
                }
                if(min!=i)
                {
                    int tmp=array[min];
                    array[min]=array[i];
                    array[i]=tmp;
                }
            }
        }
    
     /**
         * 希尔排序
         * @param array
         */
        private  void shellSort(int[] array)
        {
            //增量gap,并逐步缩小增量
            for(int gap=array.length/2;gap>0;gap/=2){
            //从第gap个元素,逐个对其所在组进行直接插入排序操作
                for(int i=gap;i<array.length;i++)
                {
                    int j=i;
                    while (j-gap>=0 && array[j]<array[j-gap]){
                        //移动法
                        swap(array,j,j-gap);
                        j-=gap;
                    }
                }
            }
        }
    
        private void swap(int[] array,int a,int b)
        {
             int tmp=array[a];
             array[a]=array[b];
             array[b]=tmp;
        }
    
    

  • 相关阅读:
    linux2.6.24.3下移植SD/MMC到S3C2440上的全历程
    设置装备布置了下双表示器
    Virtual Box 1.5.0 - 实用的“无缝窗口”
    oracle DB LINK 运用
    Linux下的tidy安置
    Linux效劳器装机安全疾速进阶指南(2)
    Linux下历程间通信
    Firefox 3 CSS Hack
    Linux下的搜刮东西find根基用法
    Linux效能器装机平安快速进阶指南(3)
  • 原文地址:https://www.cnblogs.com/falcon-fei/p/11060196.html
Copyright © 2011-2022 走看看