【2015/03/25】冒泡排序的实现

来源:互联网 发布:网络危机处理公司 编辑:程序博客网 时间:2024/04/29 17:01

    大家好,我又来了,我的萝卜青菜观众朋友们,你们好,嘿树上的猴子,今天吃香蕉了吗?反正看的人有100个都不会有一个留言,所以你们都是猴子。。。

    这几天在学javascript,为暑假实习做准备。还有之前面了CVTE的春招。我天真地以为只要态度好人家就要了。结果发现数据结构和算法不去用真的是找不到工作的。呵呵。看懂了没用啊。要会用。我一面的时候HR问我。会不会快速排序,我只把大概的方法说出来,具体实现那是上学期的事了,我早已经忘了。因为现在在学的java中,暂时用到这些数据结构和算法还是比较少的。结果人家问我冒泡排序,我很激动地说我会实现。刚想讲HR话锋一转问我时间复杂度,我摔啊!!!以前考试都是写出来慢慢算的啊。反正面试也不是很好。我当时脑袋一片空白说忘了。呵呵。被failed了。现在要把以前学过的东西都实现一遍才行。恩。慢慢来。

     首先说一下冒泡排序的思想哦。就是全部相邻元素进行比较。满足条件就交换元素,不满足就继续用下一个元素比较。假设现在有数组a[10],要把最大的元素放进a[9],也就是最后。那第一次外层循环就是a[0]和a[1]比较,若a[1]>a[0],怎往下走,用a[1]和a[2]比较,如果a[2]<a[1],则a[2]和a[1]要交换位置。交换之后a[2]最大。以此类推,到最后内层循环完了之后,最后一个元素就最大了。此时外层循环继续执行。等待外层循环执行完了之后,整个数据就有序了。下面贴代码。大家看代码比较好理解。

public class Te{//实现一个冒泡排序static void bubbleSort(int[] a ){//定义一个元素temp,交换变量时用int temp;for(int i=0;i<a.length -1;i++){for(int j=0;j<a.length-i-1;j++){//把最后元素往后移if(a[j]>a[j+1]){temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}}public static void main(String[] arg){int[] a ={10,9,8,7,6,5,4,3,2,1};for(int i=0;i<a.length ;i++){System.out.print(a[i]+" ");}bubbleSort(a);System.out.println();for(int i=0;i<a.length ;i++){System.out.print(a[i]+" ");}}}



<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">  从这段代码可以看出,冒泡排序的时间复杂度是o(n^2);呵呵,真的一辈子也忘不了呢。</span>

   还有,上面这段代码是可以改进的。就是程序如果某一次不用交换。就是已经有序,那么程序就可以退出。这时候加个变量去控制它就可以了。
   大家自己想办法改进哦。

    今晚就这样。



0 0