您的位置:首页 > 其它

选择排序法&冒泡排序法

2015-06-03 09:44 155 查看
选择排序法和冒泡排序法是常用的排序方法。

如要将数组 [32,84,16,5,8] 按升序排列成 [5,8,16,32,84],下面以两种方法分别实现。

1. 选择排序法

基本思想:

1. 第一趟:将第一个数与第二个数相比较,若第二个数较小,则第一个数与第二个数交换,否则不变;

2. 再将第一个数与第三个数比较,若第三个数较小,则交换,否则不变;

依此类推……

则第一趟排序时各数据所处位置应是:

初始:32,84,16,5,8

第一次比较后:32,84,16,5,8

(注:第一次比较后,因84>32,故不变)

第二次比较后:16,84,32,5,8

(注:第二次比较后,因16<32,故交换,此时处于第一位置的16即为新的第一个数)

第三次比较后:5,84,32,16,8

(注:第三次比较时,16是第一位数,与第四位数5相比较)

第四次比较后:5,84,32,16,8

(注:第四次比较后,因8>5,故不变)

第二趟排序时,因首位数字5己是最小数,且排在第一位,就可以不再管它了,就只需对数组:[84,32,16,8] 进行排序,具体过程同上面一样。

Java 代码示例:

[code]private static void selectionSort(int [] a) {   
    for(int i=0; i<a.length; i++) {
        for(int j=i+1; j<a.length; j++) {
            if(a[i] > a[j]) {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }   
        }   
    }   
}


2. 冒泡排序法

基本思想:

1. 首先将处于第一位置的数与处第二位置的数相比较,若第二位置的数较小,则交换,否则不变;此处,因84>32,故不变。

2. 然后将第二位置的数与第三位置的数比较,若后者较小,则交换,否则不变;此例中,因16<84,故交换;交换后,84即为新的第三位置数。

3. 之后,再将第三位置的数与第四位置的数比较,若后者小,则交换,否则不变;此例中,因5<84,故交换;交换后,84为新的第四位置数。

4. 依此类推,将第四位置数与第五位置数相比较,即完成了第一趟排序。

第一趟排序过程中各数据位置:

初始顺序:32,84,16,5,8

第一次比较后:32,84,16,5,8

第二次比较后:32,16,84,5,8

第三次比较后:32,16,5,84,8

第四次比较后:32,16,5,8,84

第二趟排序与第一趟排序类似,只是最后一个数字己经是最大,因此所需排的数组是:[32,16,5,8],以此类推

Java 代码实现:

[code]private static void bubbleSort(int [] a) {
    for(int i=0; i<a.length-1; i++) {
        for(int j=0; j<a.length-1-i; j++) {
            if(a[j] > a[j+1]) {
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }   
        }   
    }       
}


转自:选择排序法和冒泡排序法

Reference:http://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: