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;
        }
    
    

  • 相关阅读:
    学习笔记 MYSQL报错注入(count()、rand()、group by)
    学习笔记 HTTP参数污染注入
    学习笔记 MSSQL显错手工注入
    代码审计入门后审计技巧
    字符串的排列
    二叉搜索树与双向链表
    复杂链表的复制
    二叉树中和为某一值的路径
    二叉搜索树的后序遍历序列
    从上往下打印二叉树
  • 原文地址:https://www.cnblogs.com/falcon-fei/p/11060196.html
Copyright © 2011-2022 走看看