#初学算法# 归并排序与冒泡排序算法对比

来源:互联网 发布:南京程序员培训机构 编辑:程序博客网 时间:2024/05/16 07:10
 

        最近刚看算法导论,想自己比较一下冒泡排序跟归并排序。

        归并排序的算法复杂度:nlogn

        冒泡排序的算法复杂度:n^2

        第一次发博客,各位大虾有什么建议尽管提,非常感谢!

public class Sort {/** * @param  * @author darkhorse_pxf */static int count=1;  //用于计算归并排序操作次数static int count2=1;  ////用于计算冒泡排序操作次数public static void main(String[] args) {int a[]={54,47,15,475,21,57,67,18,88,245};int b[]={54,47,15,475,21,57,67,18,88,245};System.out.println("归并排序:");mergeSort(a,0,a.length-1);   //归并排序System.out.println("归并排序共执行"+count+"次");System.out.println("冒泡排序:");bubbleSort(b);      //冒泡排序System.out.println("冒泡排序共执行"+count2+"次");/**测试Mergeint a[]={1,3,5,7,9,2,4,6,8,10};Merge.Merge(a, 0, 4, a.length-1);for(int i=0;i<a.length;i++){System.out.print(a[i]+"   ");}System.out.println();*/}private static void bubbleSort(int[] b) {   //冒泡排序int k;for(int i=0;i<b.length;i++){for(int j=i;j<b.length;j++){if(b[i]<=b[j]){k=b[i];b[i]=b[j];b[j]=k;count2++;}}for(int x=0;x<b.length;x++){System.out.print(b[x]+"   ");}System.out.println();}}public static void mergeSort(int[] numbers,int firstNumber,int lastNumber) {if(firstNumber<lastNumber){int midleNumber=(firstNumber+lastNumber)/2;mergeSort(numbers,firstNumber,midleNumber);mergeSort(numbers,midleNumber+1,lastNumber);Merge(numbers, firstNumber, midleNumber, lastNumber);for(int i=0;i<numbers.length;i++){System.out.print(numbers[i]+"   ");}System.out.println();}}public static void Merge(int numbers[],int p,int q,int r){int n1=q-p+1;int n2=r-q;int Left[]=new int[n1];int Right[]=new int[n2];for(int i=0;i<Left.length;i++){Left[i]=numbers[i+p];}for(int j=0;j<Right.length;j++){Right[j]=numbers[q+1+j];}int i=0;int j=0;while(p<=r){if(i==Left.length){while(j<Right.length){numbers[p++]=Right[j++];}break;}else if(j==Right.length){while(i<Left.length){numbers[p++]=Left[i++];}break;}if(Left[i]<=Right[j]){numbers[p++]=Left[i++];}else{numbers[p++]=Right[j++];}count++;}}}

运行结果:



                                             
0 0
原创粉丝点击