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;

        }

  • 相关阅读:
    垃圾收集器
    垃圾回收机制算法分析
    【kinetic】操作系统探索总结(六)使用smartcar进行仿真
    【kinetic】操作系统探索总结(五)创建简单的机器人模型smartcar
    VS2015配置环境支持opencv3库(网络方法总结)
    【超级经典】程序员装B指南(转)
    shell编程-bash教程入门
    GraduateDesign-给APP添加获取位置信息和天气预报的功能(json)
    GraduateDesign-初试APP编写(去除虚拟按键和禁止状态栏下拉)
    device_create为何可以在/sys/class/具体类/属性文件?怎么实现的
  • 原文地址:https://www.cnblogs.com/talkice/p/3346238.html
Copyright © 2011-2022 走看看