• 排序算法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
  • 相关阅读:
    【H5】ie8如何兼容html5标签(hack)
    mysql数据库:分表、多表关联、外键约束、级联操作
    mysql数据库:mysql初识
    mysql数据库:数据类型、存储引擎、约束、
    并发编程:协程TCP、非阻塞IO、多路复用、
    并发编程:同步异步、队列、协程与实现方式
    并发编程: GIL锁、GIL与互斥锁区别、进程池与线程池的区别
    并发编程:生产消费模型、死锁与Rlock、线程、守护线程、信号量、锁
    并发编程:守护进程、互斥锁、案例、进程间通讯
    并发编程:进程、多道、进程执行顺序与常用属性
  • 原文地址:https://www.cnblogs.com/zhangxue521/p/6748189.html
Copyright © 2020-2023  润新知