冒泡排序法和选择排序法的排序过程
来源:互联网 发布:骰宝小游戏软件 编辑:程序博客网 时间:2024/05/14 14:40
冒泡排序法:
维基百科定义:冒泡排序(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变量保存该次排序“最小值”在数组中的位置,直到本次结束时才将“最小值”交换到正确的位置。
- 冒泡排序法和选择排序法的排序过程
- 冒泡排序法、选择排序法和插入排序法的排序过程
- 选择排序法和冒泡排序法
- 冒泡排序法和选择排序法
- 冒泡排序法和选择排序法
- 冒泡法排序和选择法排序
- 冒泡排序法和选择排序法
- 选择排序法和冒泡排序法
- 冒泡排序和选择法排序
- java冒泡排序和选择排序法
- Java:冒泡排序法 和 选择排序
- 冒泡排序和选择排序法的图示解析
- 数列排序(选择排序法和冒泡排序法)
- Java中两种排序源码:冒泡排序和选择排序法
- 选择法排序,冒泡排序,递归排序
- 冒泡、选择排序法
- 选择排序和冒泡排序的学习
- 选择排序和冒泡排序的比较
- Android服务器端开发
- 在windows下和Linux下安装jdk的详细设置
- tcpdump 用法
- IE6下jQuery选中select的BUG
- TexturePacker用处
- 冒泡排序法和选择排序法的排序过程
- IPC$连接出现1326错误处理
- 昆明2名民警处警过程中遭醉酒嫌疑人捅伤致死-民警-处警-醉酒
- Struts2加载jar包问题:Dispatcher initialization failed
- 设置port-channel cisco 35
- 黑马程序员________Java动态代理类的学习和个人理解
- equals和==的区别(java)
- 广东联通2013年校园招聘
- C 内存分配(转载)