数据结构和算法:Python实现选择排序

程序如下:

def selection_sort(alist):
    n=len(alist)

    for i in range(n-1):#到n-1停止是因为最后一个肯定是最大的无须比较
        min_index=i
        for k in range(i+1,n):#到n停止是因为到最后一个不一定是最小的,所以需要每一个都进行比较
            if(alist[k]<alist[min_index]):
                min_index=k
                alist[i],alist[min_index]=alist[min_index],alist[i]
    return alist
#还有一点没有理解,继续dig
alist=[1,3,5,2,3,56,2]
print(selection_sort(alist))

实现程序的思路是首先找到一个小区间内的元素,然后和小区间内每一个元素进行比较,如果这个元素是最小的,那么那到已排序最小元素的最右边,如果不是,那么找到小区间内最小元素再拿到已排序最小元素的右边,这样就可以实现有趣的选择排序啦!

原文地址:https://www.cnblogs.com/geeksongs/p/12598980.html

时间: 2024-11-09 07:56:13

数据结构和算法:Python实现选择排序的相关文章

【数据结构与算法 02】选择排序

算法思想: 遍历数组array[N],索引为 i,然后算出[i+1,N-1]区间中的最小数,与array[i]交换,最后一个数因为只有一个,所以不用比较外循环为 N-2次 博客地址:http://blog.csdn.net/mkrcpp/article/details/39181077 import java.util.Arrays; /*** * @title 选择排序 * @author michael.mao * @date 2014年9月10日 下午2:32:01 * @version

数据结构和算法之简单选择排序

/// <summary> /// 简单选择排序 /// 给定数组:int[] arr={里面n个数据}: /// 第1趟排序,在待排序数据arr[1]~arr[n]中选出最小的数据,将它与arrr[1]交换: /// 第2趟,在待排序数据arr[2]~arr[n]中选出最小的数据,将它与r[2]交换: /// 以此类推,第i趟在待排序数据arr[i]~arr[n]中选出最小的数据,将它与r[i]交换,直到全部排序完成. /// </summary> /// <param n

排序算法七:选择排序之堆排序

排序算法七:选择排序之堆排序 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 引言 在我的博文<"主宰世界"的10种算法短评>中给出的首个算法就是高效的排序算法.本文将对排序算法做一个全面的梳理,从最简单的"冒泡"到高效的堆排序等. 上博文讲述了选择排序中的简单排序算法,本文介绍的堆排序是树性选择排序,采用堆这个数据结构来辅助排序. 排序相关的的基本概念 排序:将一组杂乱无章的数据按一定的规律顺次排列起来. 数据

排序算法(冒泡排序,选择排序,插入排序,快速排序)

数组的排序算法 选择排序 每次选择所要排序得数组中的最大值(由大到小排序,由小到大排序则选择最小值)的数组元素,将这个数组元组的值与最前面没有排序的数组元素进行交换, 第一次排序之后,最大的数字来到了第一位,再从第二个元素开始找,找到最大的元素,与第二个交换位置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include <std

【算法】简单选择排序C语言实现

上一篇我们谈到了冒泡排序,实现了两个版本的冒泡排序,不知道大家有没有对冒泡排序的特点进行一下总结呢?其实冒泡排序还算是比较暴力的,因为它频繁不断的进行交换,那么这样的话,我们的计算机的计算频率就会很高,不算是很高效,那么我们可不可以找到一种交换次数少一点的方法呢?这就引出了我们接下来要介绍的简单选择排序算法了. 简单选择排序的基本思想就是通过N-1次的关键字间的比较,从N - i + 1个记录中选择一个关键字最小记录,并和第i(1<= i <= n)个记录交换,其实简单选择排序和冒泡排序在思路

[1] 算法之路 - 选择排序

选择排序 – 算法 1. 将要排序的对象分作2部份,一个是已排序的,一个是未排序的 2.  从后端未排序部份选择一个最小值,并放入前端已排序部份的最后一个 e.g: 排序前:70 80 31 37 10 1 48 60 33 80 [1] 80 31 37 10 7048 60 33 80 选出最小值1 [1 10] 31 37 80 7048 60 33 80 选出最小值10 [1 10 31] 37 80 7048 60 33 80 选出最小值31 [1 10 31 33] 80 7048

排序算法之直接选择排序

直接选择排序是最简单直观的排序算法,属于选择排序. 直接算法的排序思路: 第一趟,程序将记录定位在第一个数据上,拿第一个数据依次和后面的数据进行比较,如果第一个数据大,交换,依次类推.经过第一趟比较,这组数据中最小的数据被选出来,排在第一位. 第二趟,程序将记录定位在第二个数据上,拿第二个数据依次和后面的数据比较,同样地,第二个数据大就交换.经过第二次比较,这轮最小的书被选出来,放在了第二位. 这样经过n-1次比较,这组数据就会变得有序.下面是直接选择的排序算法实现. /** * Created

一步一步写算法(之选择排序)

原文:一步一步写算法(之选择排序) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 选择排序是和冒泡排序差不多的一种排序.和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最小的数据之后,才会发生交换.怎么交换呢?我们可以以下面一组数据作为测试: 2, 1, 5, 4, 9 第一次排序:1, 2, 5, 4, 9 第二次排序: 1, 2, 5, 4, 9 第三次排序: 1, 2, 4, 5, 9 第四次排序: 1, 2, 4, 5,

算法之旅 | 选择排序法

算法之旅 | 选择排序法 HTML5学堂-码匠:数据快速的计算与排序,与前端页面性能有直接的关系.由于排序的算法有很多,在本次"算法系列"的分享当中,我们先从简单易上手的选择排序法开始,其它的排序算法会随后陆续跟大家一起分享. 算法的基本概念 算法是什么,它有何作用 为解决一个问题而采取的方法和步骤,称为算法. 我们可以把算法看成一本"福字剪纸教程",其中每一种算法就是剪纸教程中的一种包含"固定步骤"的剪纸方法,使用者只要按照步骤进行剪纸,就可以

冒泡排序算法和简单选择排序算法的js实现

之前已经介绍过冒泡排序算法和简单选择排序算法和原理,现在有Js实现. 冒泡排序算法 let dat=[5, 8, 10, 3, 2, 18, 17, 9]; function bubbleSort(data) { for(let i=0;i<data.length-1;i++){ for(let j=0;j<data.length-1-i;j++){ if(data[j]>data[j+1]){ [data[j],data[j+1]]=[data[j+1],data[j]]; } } }