冒泡和选择,我必须区别你们俩

一直没怎么研究排序的东西,去年看了快速排序,相当强大的感觉,而自己一贯说到排序就想起冒泡,可是一写代码起来总是写成选择,而我却一直把它当做是冒泡,真是坑。这次记录起来,以后就不会忘记了!

排序规则:从小到大

冒泡:就是一组数中,从头到尾一次前后两个数顺序地比较,一旦发现前数大于后数,立马交换值。代码如下:

package net.dont.sort;
/**
* 关于冒泡排序
*/
public class TestBubble {

/**
*
@param args
*/
public static void main(String[] args) {
TestBubble tb = new TestBubble();
int[] a = {1,8,5,6,3,7,5,4,8,9,12,2};
tb.bubbleSort(a);
for(int c : a){
System.out.println(c);
}
}
static void bubbleSort(int[] array){
if(array.length == 0)return ;
for(int i=0;i<array.length-1;i++){//i是计数标记
for(int j=0;j<array.length-i-1;j++){//注意终止条件的判断,冒泡的亮点在于从头到尾一对一对比较
if(array[j]>array[j+1]){
swap(array, j, j+1);
}
}
}
}
static void swap(int[] array,int i,int j){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}

}

第一个for的i变量是用来累计比较组次的.

选择排序:就是在整一组里先以第一个位置作为起点,让上面的数跟后面的所有数依次进行比较,其中一旦发现有更小的数,就交换;全部比较完之后就已经把最小值放到了第一位了,然后就是从第二位开始,下面不说了,直接看代码:

 1 package net.dont.sort;
2 /**
3 * 选择排序
4 */
5 public class TestSelectSort {
6
7 /**
8 * @param args
9 */
10 public static void main(String[] args) {
11 TestSelectSort ts = new TestSelectSort();
12 int[] a = {1,8,5,6,3,7,5,4,8,9,12,2};
13 ts.selectSort(a);
14 for(int c : a){
15 System.out.println(c);
16 }
17 }
18
19 static void selectSort(int[] array){
20 if(array.length == 0)return ;
21 for(int i=0;i<array.length-1;i++){
22 for(int j=i+1;j<array.length;j++){
23 if(array[i]>array[j]){
24 swap(array, i, j);
25 }
26 }
27 }
28 }
29
30 static void swap(int[] array,int i,int j){
31 int temp = array[i];
32 array[i] = array[j];
33 array[j] = temp;
34 }
35
36 }

这次,第一个for中的变量i不在是指次数,而是代表第某个数的位置,比如i=0,表示array[i]是要用来装最小值的。而j是遍历i后面元素的索引。

比较完毕!

posted @ 2012-03-16 21:48  Dont  阅读(...)  评论(...编辑  收藏