排序算法6--选择排序--简单选择排序

Posted 张小雪、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序算法6--选择排序--简单选择排序相关的知识,希望对你有一定的参考价值。

简单选择排序

简单选择排序属于选择排序, 选择排序的思想是:每一趟从待排序的记录中选出关键字最小的记录,按顺序放在以排序的记录序列的后面,知道全部排完为止。

 

1.简单选择排序法是每次循环找出最值,循环结束后将最值调整到合适位置,交换的次数少。

 

每次找出当前无序队列中的最小的元素与第一个交换位置,再选择第二小的与第二个交换位置
  原始队列:   3 5 6 2 4 1(最小元素1与3交换)
  第一步:  1 5 6 2 4 3 (当前最小元素2与5交换)
  第二步:  1 2 6 5 4 3 (当前最小元素3与6交换)
  第三步:  1 2 3 5 4 6 (当前最小元素4与5交换)
  第四步:  1 2 3 4 5 6 
  第五步:  1 2 3 4 5 6 
  第六步:  1 2 3 4 5 6

 

 

 

2.时间复杂度

 

  最好情况(正序)不移动

 

  最坏情况(逆序)移动3(n-1)次

 

  平均时间复杂度O(n*n)

 

  空间复杂度O(1)

 

     具体时间复杂度等分析,请参考:http://www.cnblogs.com/zhangxue521/p/6748085.html

 

3.算法特点

 

  ①稳定排序

 

  ②可用于链式存储结构

 

  ③移动记录次数较少,当每一记录占用空间较多时,此方法比直接插入排序快

 

 

java实现:

 

 1 package 平时常用;
 2 
 3 import java.util.Scanner;
 4 
 5 public class _2简单选择排序 {
 6     public static void main(String[] args) {
 7         int a[] = new int[6];
 8          Scanner scanner = new Scanner(System.in);
 9          for (int i = 0; i < a.length; i++) {
10             a[i] = scanner.nextInt();
11         }
12              for (int i = 0; i < a.length; i++) {
13                 int min = i;
14 //                循环找当前队列中的最小的数字,将min标志赋予它
15                 for (int j =i+1; j < a.length; j++) {
16                     if ( a[j]<a[min] ) {
17                         min = j;
18                     }
19                 }
20                 //交换最小值到当前无序队列的最前面
21                     if (min!=i) {
22                         int temp = a[i];
23                         a[i] = a[min];
24                         a[min] = temp;
25                     }
26                 for (int m : a) {
27                     System.out.print(m+" ");
28                 }
29                 System.out.println();
30             }
31     }
32 }

 

 

js实现:

 1 function jiandanSort(a){
 2     var i,j,temp,min;
 3     for (i=0;i<a.length;i++) {
 4         min = i;
 5         //循环找到当前队列的最小值
 6         for (j = i+1;j<a.length;j++) {
 7             if(a[j]<a[min])
 8             min = j;
 9         }
10         //将最小值交换到当前无序队列的最前面
11         if(min!=i){
12             temp = a[i];
13             a[i] = a[min];
14             a[min] = temp;
15         }
16     }
17 }
18 var a = new Array(7,2,6,5,1,4,3);
19 jiandanSort(a);
20 document.write("_6简单选择排序:"+a +"<br />");

 

python实现:

1 def jiandanSort(a):
2     for i in range(0,len(a)):
3         min = a[i]
4         for j in range(i+1,len(a)):
5             if a[j] < min:
6                 min = a[j]    #找到最小值
7         if min != a[i]:
8             min ,a[i] = a[i],min
9     return a

 

以上是关于排序算法6--选择排序--简单选择排序的主要内容,如果未能解决你的问题,请参考以下文章

选择排序(简单选择排序堆排序的算法思想及代码实现)

八大排序算法的python实现简单选择排序

算法选择排序

4.3_8种常用排序算法3(选择排序:简单选择排序+堆排序)

选择排序

排序算法——选择排序