选择排序法&冒泡排序法

来源:互联网 发布:fireworks软件安装步骤 编辑:程序博客网 时间:2024/06/06 09:05

选择排序法和冒泡排序法是常用的排序方法。

如要将数组 [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 代码示例:

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 代码实现:

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

0 0