zoukankan      html  css  js  c++  java
  • 排序算法 选择排序(selection sort)

    选择排序(Selection sort)跟插入排序一样,也是O(n^2)的复杂度,这个排序方式也可以用我们的扑克牌来解释。

    概念

    桌面上有一堆牌,也是杂乱无章的,现在我们想将牌由小到大排序,如果使用选择排序来做,应该是这样来做。

    1. 遍历桌面牌堆里的牌,从第一张牌到最后一张,找到牌面最小的一张,然后将抽出,并扣在手上。
    2. 第二次遍历桌面牌堆里的牌,从第一张牌到最后一张,仍然去找现在桌面上牌面最小的一张,找出来,还是扣在手上。
    3. 第三次遍历……重复步骤。虽然桌面上的牌是无序的,但是我们扣在手上的牌是有序的。
    4. 第N次遍历……重复直到结束,现在桌面上没有牌,所有的牌都抓在手里,而且手上的牌全是排序排好的。
      这个过程就是选择排序。

    伪代码 - SelectionSort(seq)

    n = seq.length
    for j=1 to n-1
    	smallest = j
    	for i = j+1 to n
    		if seq[i] < seq[smallest]
    			smallest = i
    	exchange seq[j] with seq[smallest]
    

    注:
    j=1指的是第一个元素,即我们常常的seq[0]。
    套用一种语言来实现算法。

    Python版

    def sort(seq):
    	n = len(seq)
    	for j in range(n - 1):
    		smallest = j
    		for i in range(j + 1, n):
    			if seq[i] < seq[smallest]:
    				smallest = i
    		if smallest != j:
    			seq[j], seq[smallest] = seq[smallest], seq[j]
    	return seq
    

    Python版源码:Github-Syler-Fun-Selectionsort-Python

    Java版

    public static int[] sort(int[] seq)
    {
     int n = seq.length;
     for(int j = 0; j < n - 1; j++){
       int smallest = j;
       for(int i = j + 1; i < n; i++){
         if(seq[i] < seq[smallest]){
           smallest = i;
         }
         if(smallest !=j) {
           int temp = seq[smallest];
           seq[smallest] = seq[j];
           seq[j] = temp;
         }
       }
     }
     return seq;
    }
    

    Java版源码:Github-Syler-Fun-Selectionsort-Java
    看起来还是Python写起来比较短一点呢。


    作者:xiao.chun(小春)
    我的独立博客:http://1few.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

  • 相关阅读:
    防火墙透明模式
    HP管理工具System Management Homepage安装配置
    kbmmw 中JSON 中使用SQL 查询
    kbmmw 中JSON 操作入门
    第一个kbmmw for Linux 服务器
    kbmmw 5.02发布
    kbmmw 5.01 发布
    使用delphi 10.2 开发linux 上的Daemon
    使用unidac 在linux 上无驱动直接访问MS SQL SERVER
    使用delphi 10.2 开发linux 上的webservice
  • 原文地址:https://www.cnblogs.com/asis/p/6810140.html
Copyright © 2011-2022 走看看