冒泡排序法和选择排序法的排序过程
2012-10-17 15:27
267 查看
冒泡排序法:
维基百科定义:冒泡排序(Bubble Sort,泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序对
个项目需要O(
)的比较次数,且可以原地排序。尽管这个算法是最简单了解和实作的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。
java测试代码
测试结果如下所示:
这是原数组
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测试代码
测试结果如下所示:
这是原数组
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变量保存该次排序“最小值”在数组中的位置,直到本次结束时才将“最小值”交换到正确的位置。
维基百科定义:冒泡排序(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变量保存该次排序“最小值”在数组中的位置,直到本次结束时才将“最小值”交换到正确的位置。
相关文章推荐
- 冒泡排序法、选择排序法和插入排序法的排序过程
- 数列排序(选择排序法和冒泡排序法)
- 常用排序法之一 ——冒泡排序法和选择排序法
- 常用排序法一 ——冒泡排序法和选择排序法(非原创)
- 排序:选择排序法,冒泡排序法,快排(C,C++)
- 经典数组排序方法------选择排序法,冒泡排序法
- php几种排序的方法--冒泡排序法,选择排序法,快速排序法
- 数字排序问题(逆序,顺序)(冒泡排序法,选择排序法)
- 编程基础知识点之排序:冒泡排序法,选择排序法
- 使用随机函数初始化一个数组,并对数组进行排序(冒泡排序法和选择排序法)
- 数据结构中的排序-冒泡排序法(一)
- 数据结构-排序: 选择排序(堆选择排序法)
- 可以依据任何字段进行排序并分页的存储过程
- 可按任意字段排序的分页存储过程
- 专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
- 【python】python数据结构(四)——排序:冒泡排序法
- 浅谈JavaScript实现可视化展示冒泡排序过程
- iOS可视化动态绘制八种排序过程
- 带排序的oracle分页存储过程
- 数据结构-排序: 交换排序(冒泡排序法)