您的位置:首页 > 其它

冒泡排序法和选择排序法的排序过程

2012-10-17 15:27 267 查看
冒泡排序法:

维基百科定义:冒泡排序(Bubble Sort,泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序对

个项目需要O(

)的比较次数,且可以原地排序。尽管这个算法是最简单了解和实作的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。

java测试代码

public class ArraySort {
public static void main(String[] args) {
int[] dataArray = { 3, 0, 2, 7, 6, 10, 8, 1, 9, 4, 5 };

System.out.println("这是原数组 ");
for (int da : dataArray) {
System.out.print(da + " ");
}

// 冒泡排序法
int temp = 0;
for (int i = 0; i != dataArray.length; ++i) {
for (int j = i + 1; j != dataArray.length; ++j) {
System.out.println("");
for (int da : dataArray) {
System.out.print(da + " ");
}
System.out.print("....." + dataArray[i] + " " + dataArray[j]);

if (dataArray[i] > dataArray[j]) {
temp = dataArray[i];
dataArray[i] = dataArray[j];
dataArray[j] = temp;
System.out.print("   交换一次");
}
}
}

System.out.println("\n这是冒泡法");
for (int da : dataArray) {
System.out.print(da + " ");
}
}// end main
}// end class


测试结果如下所示:

这是原数组

3 0 2 7 6 10 8 1 9 4 5

3 0 2 7 6 10 8 1 9 4 5 .....3 0 交换一次

0 3 2 7 6 10 8 1 9 4 5 .....0 2

0 3 2 7 6 10 8 1 9 4 5 .....0 7

0 3 2 7 6 10 8 1 9 4 5 .....0 6

0 3 2 7 6 10 8 1 9 4 5 .....0 10

0 3 2 7 6 10 8 1 9 4 5 .....0 8

0 3 2 7 6 10 8 1 9 4 5 .....0 1

0 3 2 7 6 10 8 1 9 4 5 .....0 9

0 3 2 7 6 10 8 1 9 4 5 .....0 4

0 3 2 7 6 10 8 1 9 4 5 .....0 5

0 3 2 7 6 10 8 1 9 4 5 .....3 2 交换一次

0 2 3 7 6 10 8 1 9 4 5 .....2 7

0 2 3 7 6 10 8 1 9 4 5 .....2 6

0 2 3 7 6 10 8 1 9 4 5 .....2 10

0 2 3 7 6 10 8 1 9 4 5 .....2 8

0 2 3 7 6 10 8 1 9 4 5 .....2 1 交换一次

0 1 3 7 6 10 8 2 9 4 5 .....1 9

0 1 3 7 6 10 8 2 9 4 5 .....1 4

0 1 3 7 6 10 8 2 9 4 5 .....1 5

0 1 3 7 6 10 8 2 9 4 5 .....3 7

0 1 3 7 6 10 8 2 9 4 5 .....3 6

0 1 3 7 6 10 8 2 9 4 5 .....3 10

0 1 3 7 6 10 8 2 9 4 5 .....3 8

0 1 3 7 6 10 8 2 9 4 5 .....3 2 交换一次

0 1 2 7 6 10 8 3 9 4 5 .....2 9

0 1 2 7 6 10 8 3 9 4 5 .....2 4

0 1 2 7 6 10 8 3 9 4 5 .....2 5

0 1 2 7 6 10 8 3 9 4 5 .....7 6 交换一次

0 1 2 6 7 10 8 3 9 4 5 .....6 10

0 1 2 6 7 10 8 3 9 4 5 .....6 8

0 1 2 6 7 10 8 3 9 4 5 .....6 3 交换一次

0 1 2 3 7 10 8 6 9 4 5 .....3 9

0 1 2 3 7 10 8 6 9 4 5 .....3 4

0 1 2 3 7 10 8 6 9 4 5 .....3 5

0 1 2 3 7 10 8 6 9 4 5 .....7 10

0 1 2 3 7 10 8 6 9 4 5 .....7 8

0 1 2 3 7 10 8 6 9 4 5 .....7 6 交换一次

0 1 2 3 6 10 8 7 9 4 5 .....6 9

0 1 2 3 6 10 8 7 9 4 5 .....6 4 交换一次

0 1 2 3 4 10 8 7 9 6 5 .....4 5

0 1 2 3 4 10 8 7 9 6 5 .....10 8 交换一次

0 1 2 3 4 8 10 7 9 6 5 .....8 7 交换一次

0 1 2 3 4 7 10 8 9 6 5 .....7 9

0 1 2 3 4 7 10 8 9 6 5 .....7 6 交换一次

0 1 2 3 4 6 10 8 9 7 5 .....6 5 交换一次

0 1 2 3 4 5 10 8 9 7 6 .....10 8 交换一次

0 1 2 3 4 5 8 10 9 7 6 .....8 9

0 1 2 3 4 5 8 10 9 7 6 .....8 7 交换一次

0 1 2 3 4 5 7 10 9 8 6 .....7 6 交换一次

0 1 2 3 4 5 6 10 9 8 7 .....10 9 交换一次

0 1 2 3 4 5 6 9 10 8 7 .....9 8 交换一次

0 1 2 3 4 5 6 8 10 9 7 .....8 7 交换一次

0 1 2 3 4 5 6 7 10 9 8 .....10 9 交换一次

0 1 2 3 4 5 6 7 9 10 8 .....9 8 交换一次

0 1 2 3 4 5 6 7 8 10 9 .....10 9 交换一次

选择排序法

维基百科定义:选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

JAVA测试代码

// 选择排序法
int temp = 0;
for (int i = 0; i != dataArray.length - 1; ++i) {
int indexMin = i;
for (int j = i + 1; j != dataArray.length; ++j) {
System.out.println("");
for (int da : dataArray) {
System.out.print(da + " ");
}
System.out.print("....." + dataArray[indexMin] + " "
+ dataArray[j]);

if (dataArray[j] < dataArray[indexMin]) {
indexMin = j;
}
}
if (i != indexMin) {
temp = dataArray[i];
dataArray[i] = dataArray[indexMin];
dataArray[indexMin] = temp;
System.out.print("   交换一次");
}
}


测试结果如下所示:

这是原数组

3 0 2 7 6 10 8 1 9 4 5

3 0 2 7 6 10 8 1 9 4 5 .....3 0

3 0 2 7 6 10 8 1 9 4 5 .....0 2

3 0 2 7 6 10 8 1 9 4 5 .....0 7

3 0 2 7 6 10 8 1 9 4 5 .....0 6

3 0 2 7 6 10 8 1 9 4 5 .....0 10

3 0 2 7 6 10 8 1 9 4 5 .....0 8

3 0 2 7 6 10 8 1 9 4 5 .....0 1

3 0 2 7 6 10 8 1 9 4 5 .....0 9

3 0 2 7 6 10 8 1 9 4 5 .....0 4

3 0 2 7 6 10 8 1 9 4 5 .....0 5 交换一次

0 3 2 7 6 10 8 1 9 4 5 .....3 2

0 3 2 7 6 10 8 1 9 4 5 .....2 7

0 3 2 7 6 10 8 1 9 4 5 .....2 6

0 3 2 7 6 10 8 1 9 4 5 .....2 10

0 3 2 7 6 10 8 1 9 4 5 .....2 8

0 3 2 7 6 10 8 1 9 4 5 .....2 1

0 3 2 7 6 10 8 1 9 4 5 .....1 9

0 3 2 7 6 10 8 1 9 4 5 .....1 4

0 3 2 7 6 10 8 1 9 4 5 .....1 5 交换一次

0 1 2 7 6 10 8 3 9 4 5 .....2 7

0 1 2 7 6 10 8 3 9 4 5 .....2 6

0 1 2 7 6 10 8 3 9 4 5 .....2 10

0 1 2 7 6 10 8 3 9 4 5 .....2 8

0 1 2 7 6 10 8 3 9 4 5 .....2 3

0 1 2 7 6 10 8 3 9 4 5 .....2 9

0 1 2 7 6 10 8 3 9 4 5 .....2 4

0 1 2 7 6 10 8 3 9 4 5 .....2 5

0 1 2 7 6 10 8 3 9 4 5 .....7 6

0 1 2 7 6 10 8 3 9 4 5 .....6 10

0 1 2 7 6 10 8 3 9 4 5 .....6 8

0 1 2 7 6 10 8 3 9 4 5 .....6 3

0 1 2 7 6 10 8 3 9 4 5 .....3 9

0 1 2 7 6 10 8 3 9 4 5 .....3 4

0 1 2 7 6 10 8 3 9 4 5 .....3 5 交换一次

0 1 2 3 6 10 8 7 9 4 5 .....6 10

0 1 2 3 6 10 8 7 9 4 5 .....6 8

0 1 2 3 6 10 8 7 9 4 5 .....6 7

0 1 2 3 6 10 8 7 9 4 5 .....6 9

0 1 2 3 6 10 8 7 9 4 5 .....6 4

0 1 2 3 6 10 8 7 9 4 5 .....4 5 交换一次

0 1 2 3 4 10 8 7 9 6 5 .....10 8

0 1 2 3 4 10 8 7 9 6 5 .....8 7

0 1 2 3 4 10 8 7 9 6 5 .....7 9

0 1 2 3 4 10 8 7 9 6 5 .....7 6

0 1 2 3 4 10 8 7 9 6 5 .....6 5 交换一次

0 1 2 3 4 5 8 7 9 6 10 .....8 7

0 1 2 3 4 5 8 7 9 6 10 .....7 9

0 1 2 3 4 5 8 7 9 6 10 .....7 6

0 1 2 3 4 5 8 7 9 6 10 .....6 10 交换一次

0 1 2 3 4 5 6 7 9 8 10 .....7 9

0 1 2 3 4 5 6 7 9 8 10 .....7 8

0 1 2 3 4 5 6 7 9 8 10 .....7 10

0 1 2 3 4 5 6 7 9 8 10 .....9 8

0 1 2 3 4 5 6 7 9 8 10 .....8 10 交换一次

0 1 2 3 4 5 6 7 8 9 10 .....9 10

总结:从以上测试可以看出,在排序过程中,冒泡法一旦发现某两数顺序不对则立即对直接进行位置交换,选择排序法则每次通过一个indexMin变量保存该次排序“最小值”在数组中的位置,直到本次结束时才将“最小值”交换到正确的位置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: