选择排序法&冒泡排序法
2015-06-03 09:44
155 查看
选择排序法和冒泡排序法是常用的排序方法。
如要将数组 [32,84,16,5,8] 按升序排列成 [5,8,16,32,84],下面以两种方法分别实现。
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 代码示例:
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 代码实现:
转自:选择排序法和冒泡排序法
Reference:http://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F
如要将数组 [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
相关文章推荐
- 使用WAF编译NS3, DCE
- Python 抓取并解析 HTML
- std::string详解
- iOS-cornerstone破解版
- tcp参数详解之tcp_fin_timeout
- android studio导入外部项目或类库的方法
- 转 几种开放源码的TCP/IP协议栈比较
- hadoop能用到的系统端口
- java中byte取值范围为什么是 -128到127
- "Selenium for Android"的Robotium 一 概述
- vs 2008 编译遇到的问题
- linux下go的动态链接库的使用
- 获取屏幕尺寸
- PHP保留2位小数 格式化小数、浮点数
- STL应用之set
- 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”(错误原因、详细分析及解决方法)以及在Windows Server2012上安装.NET Framework 3
- WCF Contracts and Backward Compatibility
- 利用java mail发送邮件
- PHP json的插入和解析在数据库中的操作
- 对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。