总共有八种排序算法,还是慢慢看吧

1、简单排序算法

简单排序算法就是设置标兵,逐个比较数,然后查找插入位置,插入

public static void p(int[] a){
      for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");
        }
    }
    
    public static void sorting(int[] a){
        int m =a.length;
        for(int i=1;i<m;i++){
        if(i==1){
            if(a[i]<a[i-1]){
                int temp = a[i];
                a[i] = a[i-1];
                a[i-1] =temp;
            }
        }else{
         if(a[i]<a[i-1]){
            int j=i-1;
            int x=a[i];             //设置x为标兵
            //a[i]=a[i-1];
            //System.out.println(a[j]);  
            while(x<a[j]){           //查找位置,逐个比较大小
                a[j+1]=a[j];     //向后移一位    
                j--;             
                p(a);
                System.out.println();
            }
            a[j+1]=x;          //插入
            }
        }
        }
    }

 2、希尔排序算法

希尔排序算法,也算是直接插入排序的升级版。

算法思想:先将整个待排的记录序列分割成若干个子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。

操作方法:

  1. 选择一个增量序列dk1,dk2,…,dkn,其中ti>tj,dkn=1,dk=n/2;
  2. 按增量序列个数k,对序列进行k 趟排序;
  3. 每趟排序,根据对应的增量dk,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。
public static void Shell(int[] a,int n,int dk){
    
        for(int i=dk;i<n;i++){
            int j=i-dk;
            int x=a[i];
            if(a[j]>x){
                a[j+dk] = a[j];
                j-=dk;
            }
            a[j+dk]=x;
        }
    }
    public static void Shell(int[] a){
        int n=a.length;
        int dk = n/2;
        while(dk>=1){
            Shell(a,n,dk);
            dk=dk/2;
        }
    }

输出函数

public static void p(int[] a){
        for(int i=0;i<a.length;i++){
        if(i==0){
            if(a[i+1]<a[i]){
                int temp = a[i+1];
                a[i+1] = a[i];
                a[i] =temp;
            }
        }
            System.out.print(a[i] + " ");
        }
        System.out.println();
    }

 

posted on 2014-10-13 16:28  一粒麦子777  阅读(429)  评论(0)    收藏  举报