zoukankan      html  css  js  c++  java
  • 排序算法

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

        }

  • 相关阅读:
    [Unity]关于Physic Material,物理碰撞
    [Unity]当多个立方体堆叠,堆叠处出现缝隙的处理方法
    反射基础
    数据库三种事务
    一、手写ORM实现数据库查询
    UDP协议
    Wireshark抓包理解APR协议
    DBeaver用户界面窗口失效 查询窗口不显示
    二、IP、路由协议
    解决图片存入时 A generic error occurred in GDI+ 报错
  • 原文地址:https://www.cnblogs.com/talkice/p/3346238.html
Copyright © 2011-2022 走看看