Java常用排序

来源:互联网 发布:淘宝ifashion怎么开通 编辑:程序博客网 时间:2024/06/05 19:06

1、冒泡排序

思路:数组长度为n,从前往后两两相邻的数据比较大小,根据条件交换位置,,第一轮交换n-1次后就把最大(或最小)的数挪到了最后,则第二轮最后一个数据就不用比较了并把第二大(或小)数挪到了倒数第二位置,经过n轮排序后就实现了整体排序。循环控制可以使用for或者while,根据个人喜好。
代码:
package com.xtm.reflect;public class BubbleSort {public static void main(String[] args) {          int[] a = {13,21,10,124,34,9,25,0,-24,99};          pringArray(a);          int len = a.length;          for(int i=0;i<len;i++){//控制排序轮数               for(int j=0;j<len-i-1;j++){//控制每轮比较次数                   //比较两相邻数据大小,根据条件交换位置               int tmp ;               if(a[j]>a[j+1]){               tmp = a[j];               a[j] = a[j+1];               a[j+1] = tmp;               }               }          }          System.out.println("");          pringArray(a);}private static void pringArray(int[] a) {int i = 0;int max = a.length;while(i<max){System.out.print(a[i++]+"\t");}}}
或者:
package com.xtm.reflect;public class BubbleSort {public static void main(String[] args) {          int[] a = {13,21,10,124,34,9,25,0,-24,99};          pringArray(a);          int len = a.length;          for(int i=0;i<len;i++){               for(int j=1;j<len-i;j++){               int tmp ;               if(a[j-1]>a[j]){               tmp = a[j-1];               a[j-1] = a[j];               a[j] = tmp;               }               }          }          System.out.println("");          pringArray(a);}private static void pringArray(int[] a) {int i = 0;int max = a.length;while(i<max){System.out.print(a[i++]+"\t");}}}
或者
package com.xtm.reflect;public class BubbleSort {public static void main(String[] args) {int[] a = { 13, 21, 10, 124, 34, 9, 25, 0, -24, 99 };pringArray(a);int len = a.length;int i = 0;while (i < len) {int j = 1;int tmp;while (j < len - i) {if (a[j - 1] < a[j]) {tmp = a[j - 1];a[j - 1] = a[j];a[j] = tmp;}j++;}i++;}System.out.println("");pringArray(a);}private static void pringArray(int[] a) {int i = 0;int max = a.length;while (i < max) {System.out.print(a[i++] + "\t");}}}
以上的执行结果相同:
132110124349250-2499-2409101321253499124

比较总次数分析:假设数组长度为len,则需要len-1轮第一轮 :len-1次第二轮 :len-2次     ... ...第len-2轮  : 2次第len-1轮  : 1次复杂度:总次数=(len-1)+(len-2)+...+(len-(len-2))+(len-(len-1))      =len*(len-1)-(1+2+...+len-1)      =len*(len-1)-(len*(len-1)/2)      =len*len-len-len*len/2+len/2      =len*len/2-len/2      =(len*len-len)/2