排序算法

来源:互联网 发布:苹果手机照片传不到mac 编辑:程序博客网 时间:2024/06/05 11:40
  1. 计数排序
public class countSort {    //有in ,out 的版本    public static void countSort(int []in, int[]out,int k){        int []temp=new int[k+1];        for(int i=0;i<in.length;i++){            temp[in[i]]++;        }        //temp 记录的是个数。所以 -1 至关重要。        for(int i=1;i<=k;i++){            temp[i]+=temp[i-1];        }        for(int i=in.length-1;i>=0;i--){            out[temp[in[i]]-1]=in[i];            temp[in[i]]--;        }    }    public  static void main(String[]args){        int []A={6,3,2,5,1,4,0,5};//        int []R=new int[A.length];        countSort(A,6);        System.out.println(Arrays.toString(A));    }//优先第二种    public static void countSort(int[]A,int k){        int []temp=new int[k+1];        for(int i=0;i<A.length;i++){            temp[A[i]]++;        }        int p=0;        for(int i=0;i<=k;i++){            while(temp[i]-- >0){                A[p++]=i;            }        }    }}
  1. 堆排序
//对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;《《《《《《《《//max_heapfy(int []A,int i);//buildMaxHeap(int []A);//heapSort(int []A)//100w个数中找最大的100个数, 建立一个100的maxheap,从101个开始,如果大于A【0】,交换,调用MaxHeapfy (size=100);class heapsort {    //@2    public static void buildMaxHeap(int []A){        for(int i=(A.length-1)/2;i>=0;i--){            MaxHeapfy(A,i,A.length);        }    }    //@1                          maxHeapfy           notice size;    public static void MaxHeapfy(int []A,int i,int size){        int left=i*2+1;        int right=i*2+2;        int max;        if(left<size&&A[left]>A[i])max=left;        else max=i;        if(right<size&&A[right]>A[max])max=right;        if(max!=i){            int temp=A[max];            A[max]=A[i];            A[i]=temp;        }    }    //@3    public static void heapSort(int []A){        buildMaxHeap(A);        for(int i=A.length-1;i>0;i--){            int temp=A[0];            A[0]=A[i];            A[i]=temp;            MaxHeapfy(A,0,i);        }    }    public static void main(String[]args){            int []A={5,4,3,2,1};        heapSort(A);        System.out.println(Arrays.toString(A));    }}
  1. 插入排序
public class insetsort {    public  static void insertsort(int[]A,int left,int right){        for(int i=left+1;i<=right;i++){            int p=i-1;            int key=A[i];            while(p>=left&&A[p]>key){                int temp=A[p];                A[p+1]=A[p];                A[p]=temp;                p--;            }            A[p+1]=key;  //*        }    }    public  static void main(String [] args){        int []A={5,4,3,2,1};        insertsort(A,1,4);        for(int i:A){            System.out.print(i);        }    }}
  1. 冒泡排序
public class maopao {    public static void msort(int []A,int left,int right){//        for(int i=0;i<A.length-1;i++){   //n-1 次//            for(int j=0;j<A.length-1-i;j++){//                if(A[j]>A[j+1]){//                    int temp=A[j];//                    A[j]=A[j+1];//                    A[j+1]=temp;//                }//            }//        }        for(int i=0;i<right-left;i++){            for(int j=left;j<right-i;j++){                if(A[j]>A[j+1]){                    int temp=A[j];                    A[j]=A[j+1];                    A[j+1]=temp;                }            }        }    }    public static void main(String []args){        int []A={3,4,2,5,7,3,1};        msort(A,5,A.length-1);        for(int i:A){            System.out.print(i);        }    }}

5.归并排序

public class mergasort {    public static void msort(int []A,int left,int right){        if(left<right){            int mid=(left+right)/2;            msort(A,left,mid);            msort(A,mid+1,right);            merge(A,left,mid,right);        }    }    public static void merge(int []A,int left,int mid,int right){        int []l=new int[mid-left+2];        int []r=new int[right-mid+1];        for(int i=0;i<=l.length-1;i++){            l[i]=A[left+i];        }        l[l.length-1]=Integer.MAX_VALUE;        for(int i=0;i<r.length-1;i++){            r[i]=A[mid+1+i];        }        r[r.length-1]=Integer.MAX_VALUE;        int pl=0,pr=0;        for(int i=left;i<=right;i++) {            if (l[pl]<=r[pr]) {                A[i]=l[pl];                pl++;            }else{                A[i]=r[pr];                pr++;            }        }    }    public static void main(String []args){            int []A={5,4,3,2,1};        msort(A,1,4);        for(int i:A){            System.out.print(i);        }    }}
  1. 快速排序
public class quicksort {    void qsort(int []A,int l,int r){        if(l<r){            int temp=partition(A,l,r);            qsort(A,l,temp-1);            qsort(A,temp+1,r);        }    }    int partition(int []A,int left,int right){        int i=left-1;        int key=A[right];        for(int j=left;j<right;j++){            if(A[j]<key){                i++;                int temp=A[j];                A[j]=A[i];                A[i]=temp;            }        }        int temp=A[i+1];        A[i+1]=A[right];        A[right]=temp;        return i+1;    }    public  static void main(String []args){        int []A={1,9,2,4,3,6,8,5};        quicksort test=new quicksort();        test.qsort(A,0,A.length-1);        for(int i:A){            System.out.print(i);        }    }}
  1. 简单shell排序
public class shellsort {    public static void shellsort(int[]A, int n){        for(int grap=n/2;grap>0;grap/=2){            for(int i=grap;i<A.length;i++){                int key=A[i];                int j=i-grap;                for(;j>=0&&A[j]>key;j-=grap){                    A[j+grap]=A[j];                }                A[j+grap]=key;            }        }    }    public  static  void main(String []args){        int []A={5,4,3,2,1};        shellsort(A,3);        for(int i:A){            System.out.print(i);        }    }}
  1. 选择排序
public class shellsort {    public static void shellsort(int[]A, int n){        for(int grap=n/2;grap>0;grap/=2){            for(int i=grap;i<A.length;i++){                int key=A[i];                int j=i-grap;                for(;j>=0&&A[j]>key;j-=grap){                    A[j+grap]=A[j];                }                A[j+grap]=key;            }        }    }    public  static  void main(String []args){        int []A={5,4,3,2,1};        shellsort(A,3);        for(int i:A){            System.out.print(i);        }    }}```**小tips**<div class="se-preview-section-delimiter"></div>

public class tips {
//Collections

//int [] ary=new int[list.size()];//list.toArray(ary);// list.sort();// list.sort(new Comparator(){// public int compara(T o1,T o2){//      return o1-o2;// });int [] array={3,2,1};//new ArrayList(Arrays.asList());//Arrays.sort(array);//Arrays.sort(array,new Comparator(){});

}

“`

0 0