• 排序


    冒泡排序

    public  static  void bubbleSort(int a[]){
            int temp;
            for (int i = 0; i <=a.length ; i++) {
                for (int j = i+1; j < a.length; j++) {
                    if (a[i]>a[j]){
                        temp=a[i];
                        a[i]=a[j];
                        a[j]=temp;
                    }
                }
            }
        }

    插入排序

     public static void insertSort(int a[]){
            for (int i=1;i<a.length;i++){
                if (a[i]<a[i-1]){//若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入
                    int j=i-1;
                    int x=a[i];//复制为哨兵,即存储待排序元素
                    a[i]=a[i-1];//后移一个元素
                    while (j>=0&&x<a[j]){//查找在有序表的插入位置
                        a[j+1]=a[j];
                        j--;//元素后移
                    }
                    a[j+1] = x;//插入到正确位置
                }
            }
        }

    选择排序

    public  static  void selectSort(int a[]){
            int key,temp;
            for (int i = 0; i <a.length ; i++) {
                key=selectMinKey(a,i);
                if (key!=i){
                    temp=a[i];
                    a[i]=a[key];
                    a[key]=temp;
                }
            }
        }
        public   static int selectMinKey(int a[],int i){
            int key=i;
            for (int j = i+1; j <a.length ; j++) {
                if (a[key]>a[j]){
                    key=j;
                }
            }
            return  key;
        }

    希尔排序

     public  static  void  ShellInsertSort(int a[],int dk){
            for (int i = dk; i <a.length ; i++) {
                if(a[i] < a[i-dk]){          //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入
                    int j = i-dk;
                    int x = a[i];           //复制为哨兵,即存储待排序元素
                    a[i] = a[i-dk];         //首先后移一个元素
                    while(j>0&&x < a[j]){     //查找在有序表的插入位置
                        a[j+dk] = a[j];
                        j -= dk;             //元素后移
                    }
                    a[j+dk] = x;            //插入到正确位置
                }
            }
        }
        public static  void  shellSort(int a[],int n){//n为增量,当n为1时,整个数组就是一个表项序列
            int dk = n/2;
            while( dk >= 1  ){
                ShellInsertSort(a,dk);
                dk = dk/2;
            }
        }
  • 相关阅读:
    BZOJ1006: [HNOI2008]神奇的国度
    弦图与区间图
    后缀自动机
    插头DP
    BZOJ3328: PYXFIB
    BZOJ2118: 墨墨的等式
    BZOJ3916: [Baltic2014]friends
    BZOJ1337: 最小圆覆盖
    BZOJ3784: 树上的路径
    代码模版
  • 原文地址:https://www.cnblogs.com/zhuxiaodong/p/6321865.html
Copyright © 2020-2023  润新知