二、选择排序
来源:互联网 发布:paparecipe正品软件 编辑:程序博客网 时间:2024/06/06 12:59
1、算法原理
选择排序的方法可以理解为通过挑选的方式来进行排序,从第一次开始,每一次从数组中拿出最小的数,放在指定位置。第i次就放在第i个位置,这样保证了数组0~i都是按顺序排好的,只需要继续执行将i+1~n排序即可。
选择排序的平均时间复杂度为:O(n^2)。
选择排序的空间复杂度为:O(1)。
由于某些情况下,对于有重复数字的数组序列,前一个数字挪到另一个的后面,如序列{2,3,3,1},会将第一个3跟1调换,那么原来序列中的两个3前后顺序就被破坏了,所以选择排序是一个不稳定的排序。
2、代码实现
(1)JAVA实现
注:本代码设计随机生成10个1~100内的数,再对这10个数进行选择排序;
/*
* 排序算法:选择排序
* 作者:xiaoxiao
* 时间:2016.03.11
*/
import java.util.Random;
public class SelectSort {
public static void main(String[]args){
int[] arr = new int[10];//定义一个可以存100个数的数组
init(arr);
for(inti=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
SelectSort(arr);
System.out.println("");
for(inti=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
public static void init(int[]a){
Random r =new Random();
for(inti=0;i<a.length;i++){
a[i] =r.nextInt(100);
}
}
public static void SelectSort(int[] a){
int temp = 0;
for(inti=0;i<a.length-1;i++){
int minFlag =i;//选定第i个数做比较
for(intj=i+1;j<a.length;j++){
if(a[j]<a[minFlag]){
minFlag = j;
}
}
if(minFlag!=i){//如果最小的数坐标不是选定的第i个数的坐标,则交换
temp =a[i];
a[i] =a[minFlag];
a[minFlag] =temp;
}
}
}
}
运行结果:
Author: xiaoxiao
Date: 2016-03-17
-->
<?php
echo "<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />";//如果涉及到PHP网页中文乱码问题,加上该行
function SelectSort($a){
$length = count($a);
for($i=0; $i<$length-1; $i++){
$minFlag = $i;//设置默认最小数为第i个数字
for ($j=$i+1; $j < $length; $j++) { //对第i+1~$length的数字进行查找,找到最小数字对应的坐标
if ($a[$j]<$a[$minFlag]) {
$minFlag = $j;
}
}
if ($minFlag != $i) {
$temp = $a[$minFlag];
$a[$minFlag] = $a[$i];
$a[$i] = $temp;
}
}
return $a;
}
$a = array();
$nums = mt_rand(10,20);
for ($i=0; $i < $nums; $i++) {
array_push($a, mt_rand(1,100));
}
echo "待排序的数有".$nums."个!<br />";
echo "Before SelectSort: ";
for($i=0; $i<count($a); $i++){
echo $a[$i];
echo ", ";
}
echo "<br />";
echo "After SelectSort: ";
$b = SelectSort($a);
for($i=0; $i<count($b); $i++){
echo $b[$i];
echo ", ";
}
?>
- 排序二 选择排序
- 二、选择排序
- 选择排序(二)
- 二 选择排序
- 排序算法《二》选择排序
- 排序之二-----选择排序
- 排序算法二:选择排序
- 排序算法二:选择排序
- Java排序二:选择排序
- 排序算法(二):选择排序
- 排序算法(二)-选择排序
- 排序(二):选择排序
- 经典排序二:选择排序
- 选择排序(二)--树形选择排序
- 【排序二】选择排序(选择排序&&堆排序)
- 【排序二】选择排序(选择排序&&堆排序)
- 排序算法之二:选择排序之【简单选择排序】
- 排序算法系列二(选择排序)
- 使用Loadrunner11录制FTP协议脚本
- 工厂里的那些事
- 翻硬币
- java中的运算符
- Java内存泄露详解
- 二、选择排序
- 修改mysql root 密码 及 mysql 远程访问
- Tomcat 6 --- JNDI详解
- Android--活动创建&简单布局
- oracle截取字符(substr)检索字符位置(instr)工作使用
- Satellite Photographs--DFS
- Mysql数据库常用分库和分表方式
- 18.2 CSDN牛人博客!随时更新!...
- Python学习之ThreadLocal