二、选择排序

来源:互联网 发布: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;

            }

         }

     }

}


运行结果:


(2)PHP实现
        注:本代码设计随机生成10~20个1~100内的数,再对这10~20个数进行选择排序;
<!--
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 ", ";
}
?>

运行结果:
0 0
原创粉丝点击