• 排序算法


    总结了一下排序算法的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;

        }

  • 相关阅读:
    (转)堆与堆排序
    Cantor的数表
    Sticks(poj 1011)
    Square(hdu 1511)
    Fire Net(hdu 1045)
    Lake Counting(poj 2386)
    Ants (POJ 1852)
    A + B Problem II 大数加法
    深入理解计算机系统第二版家庭作业2.66
    C++ 队列queque/deque
  • 原文地址:https://www.cnblogs.com/talkice/p/3346238.html
Copyright © 2020-2023  润新知