排序---冒泡

来源:互联网 发布:curl post json body 编辑:程序博客网 时间:2024/06/06 20:10

很久没写博客,也没有好好总结一下这段时间做的东西;打算每周至少实现一个算法,首先从简单的排序开始,冒泡排序啊,选择排序等等;希望自己能坚持下去,把自己的算法和数据结构抓起来,夯实基础;废话不多说,开始吧:先从冒泡排序下手:

规则:1,比较两个数据或者对象; 2,如果第一个大就交换位置;3,向下一个位置移动一位;

要排序的对象有N个,那么第一趟就要比较N-1次 ,平均移动(N-1)/2次,第二趟就比较N-2次,平均移动(N-2)/2......

实现思路:最终是将最小的放到开始,最大的放到最后,用两个变量out,in来计数,外层for循环中的out,从最后开始,即out等于N-1(数组的标识从0开始),每经过一次循环就减1,向左移动一位,因此,此算法就不再处理已经排好序的数据了;内层for循环,计数器in从0开始,每完成一次内部循环就加1,当它等于out时结束一次循环;内层循环中,比较n和n+1位置上的对象,如果n位置上的大就交换;接下来看具体的java代码的实现:


public void BubbleSort(int [] a, int num){

int out,in;//循环的计数

int temp;//交换时用的临时变量;

for(out  =num-1;out>1;out--){

for(in =0;in<out;in++){

if(a[in]>a[in=1]){

temp = a[in];

a[in] = a[in +1];

a[in+1]= temp;

}

}

}

}


不变性:在许多算法中,有些条件在算法执行时是不变的,称为不变性,认识到不变性对理解算法是有用的,这里的不变性是 out右边的所有数据都是排好序的;


效率:效率当然是比较低的,但是研究算法先从好理解的下手,优点就是比较好理解,算法也容易实现,缺点就是效率低,接着上边分析,大概平均下来需要N(N-1)/2次比较和N(N-1)/4次的交换,用大O表示法就是O(N²);


基本上完了;比较简单,从简单入手;洗洗睡觉;

0 0
原创粉丝点击