排序算法

总结了一下排序算法的java实现。排序算法分五大类,前面是时间复杂度,后面是空间复杂度,如下:

插入排序(直接插入排序O(n2) O(1),二分插入排序,链表插入排序,希尔插入排序)

交换排序(冒泡排序O(n2) O(1),快速排序O(nlogn) O(n))

选择排序(直接选择排序O(n2) O(1),堆排序)

归并排序(归并排序O(nlogn) O(n))

分配排序(箱排序O(n) O(n),基数排序)

 

全面学习数据结构的网站:http://student.zjzk.cn/course_ware/data_structure/web/main.htm

这里主要列举四种,冒泡排序,插入排序,选择排序,快速排序

冒泡排序(稳定)

    public static int[] bubbleSort(int[] a){

       if(a==null||a.length<2) return a;

       int temp = 0;

       for (int i = a.length; i > 1; i--) {

           boolean flag=false;

           for (int j = 1; j < i; j++) {

              if (a[j-1]>a[j]) {

                  temp=a[j];

                  a[j]=a[j-1];

                  a[j-1]=temp;

                  flag=true;

              }

           }

           if (!flag) break;

       }

       return a;

  }

 

插入排序(稳定)(直接插入排序,二分插入排序,链表插入排序,希尔插入排序)

    public static int[] insertSort(int[] a){

        if(a==null||a.length<2) return a;

       int temp = 0;

       int j = 0;

       for (int i = 1; i < a.length; i++) {

           if (a[i-1]>a[i]) {

              temp = a[i];

              j=i;

              while (j>0 && a[j-1]>a[j]) {

                  a[j]=a[j-1];

                  a[j-1]=temp;

                  j--;

              }

           }

       }

       return a;

  }

选择排序(不稳定)

    public static int[] selectSort(int[] a){

       if(a==null||a.length<2) return a;

       int temp = 0;

       int index = 0;

       for (int i = 0; i < a.length-1; i++) {

           index = i;

           for (int j = i+1; j < a.length; j++) {

              if (a[index]>a[j])   index=j;

           }

           if (i!=index) {

              temp=a[index];

              a[index]=a[i];

              a[i]=temp;

           }

       }

       return a;    

    }

快速排序(不稳定)

    public static int[] quickSort(int[] a,int start,int end){

       if(a==null||a.length<2) return a;

       int temp=0;

       int i=start;

       int j=end;

       while (i<j) {

           while(i<j&&a[i]<=a[j]) j--;

           if (i<j) {

              temp=a[j];

              a[j]=a[i];

              a[i]=temp;

           }

           while(i<j&&a[i]<a[j]) i++;

           if (i<j) {

              temp=a[j];

              a[j]=a[i];

              a[i]=temp;

           }

       }

       if(i-start>1) quickSort(a,start,i-1);

       if(end-j>1) quickSort(a,j+1,end);

       return a;

    }

posted on 2013-09-29 19:02  仙剑情缘  阅读(174)  评论(0编辑  收藏  举报