排序算法lowb三人组-选择排序

def get_min_pos(li):
    min_pos = 0
    for i in range(1, len(li)):
        if li[i] < li[min_pos]:
            min_pos = i
    return min_pos

def select_sort(li):
    for i in range(len(li)-1):  # n或者n-1趟
        # 第i趟无序区范围 i~最后
        min_pos = i  # min_pos更新为无序区最小值位置
        for j in range(i+1, len(li)):
            if li[j] < li[min_pos]:
                min_pos = j
        li[i], li[min_pos] = li[min_pos], li[i]

选择排序同样复杂度比较高,了解一哈

原文地址:https://www.cnblogs.com/Treasuremy/p/10432126.html

时间: 2024-10-10 11:36:41

排序算法lowb三人组-选择排序的相关文章

排序算法lowb三人组-插入排序

def insert_sort(li): for i in range(1, len(li)): # i表示摸到的牌的下标 tmp = li[i] # 摸到的牌 j = i - 1 while j >= 0 and li[j] > tmp: # 只要往后挪就循环 2个条件都得满足 # 如果 j=-1 停止挪 如果li[j]小了 停止挪 li[j+1] = li[j] j -= 1 # j位置在循环结束的时候要么是-1要么是一个比tmp小的值 li[j+1] = tmp 和冒泡相似,循环的时候遇

【数据结构】——排序算法——3.1、选择排序

      [数据结构]--排序算法--3.1.选择排序 一.先上维基的图: 分类 排序算法 数据结构 数组 最差时间复杂度 О(n2) 最优时间复杂度 О(n2) 平均时间复杂度 О(n2) 最差空间复杂度 О(n) total, O(1)auxiliary 二.描述: 选择算法算是最直观的一个了.每次在队列里抽取一个极大(或极小)值进行排列.每次都需要遍历未被抽取的元素队列. 三.Java程序: static void selection_sort(int[] unsorted) { for

排序算法之一--冒泡排序,选择排序,插入排序

一.排序算法定义 1.排序算法定义 排序算法是一种能将一串数据依照特定顺序进行排列的一种算法 2.六种排序算法理解方式 想象小时候老师给我们按照身高进行排队时用到的方法,脑子里面要浮现老师排身高的场面   以从矮到高进行排序为例 3.稳定性的定义 一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 二.三种基本排序算法 1.冒泡排序:"移" 把最高的移到最右边 第一次循环,找到最高的那个人放到最右边       方法

常见排序算法导读(3)[简单选择排序]

这一节将介绍简单选择排序(Simple Selection Sort). 在介绍简单排序算法之前,先给出排序的确切定义,并简单介绍一下排序算法的稳定性. 排序的确切定义 假设含有n个对象的序列为{R[0], R[1], ..., R[n-1]}, 其对应的关键字(key)序列为{K[0], K[1], ..., K[n-1]}. 所谓排序, 就是确定0, 1, ..., n-1的一种排列p[0], p[1], ..., p[n-1], 使各个关键字满足如下的非递减(升序)或非递增(降序)关系:

排序算法(二)——选择排序及改进

选择排序 基本思想 冒泡排序中有一个缺点,比如,我们比较第一个数a1与第二个数a2的时候,只要a1比a2大就会交换位置,但是我们并不能确定a2是最小的元素,假如后面还有比它更小的,该元素还会与a2再次进行交换,而且这种交换有可能发生多次才能确定a2的最终位置. 选择排序可以避免这种耗费时间的交换操作,从第一个元素开始,扫描整个待排数组,找到最小的元素放之后再与第一个元素交换位置,然后再从第二个元素开始,继续寻找最小的元素与第二个元素交换位置,依次类推. java实现 //选择排序 public

常见的排序算法(二) 选择排序

选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序: 思想 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: ①初始状态:无序区为R[1..n],有序区为空. ②第1趟排序 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区

排序算法总结之直接选择排序

概念 每一趟在最后的n-i+1(i=1,2,...,n-1)中取最小的记录作为有序表的第i个记录 动态效果: 优点:算法简单,容易实现 缺点:每次只能确定一个元素 Java实现: package com.liuhao.sort; import java.util.Arrays; //定义一个数据包装类 class DataWrap implements Comparable<DataWrap>{ int data; String flag; public DataWrap(int data,

基础排序算法(冒泡排序,选择排序,插入排序)

最近经常调用api中的排序算法,很少自己写了,有时候也只写写快速排序这些比较快的排序,然而刚开始学排序时用的一些基本的排序算法却有点忘了 正好今天Java老师让我们每个人写个选择排序热热手,趁这个机会再来复习下一些基本的排序好了. 一.冒泡排序(稳定排序) 学编程接触到的第一个排序算法,基本思路就是,给定一个无序数组a0.a1.a2.a3....an; 通过从左到右相邻的元素两两比较,把最大或者最下的数依次放到数组的右边,最后得到有序的序列 public static void maoPao(i

排序算法(二)——选择排序

上篇博客介绍了冒泡算法,接下来介绍插入排序和选择排序. 选择排序; 算法思想:从无序序列中找到最大(或最小)元素,放在序列的最右边(或最左边). 代码如下: #include <iostream> using namespace std; void swap(int &a,int &b) { int temp=a; a=b; b=temp; return; } void Insert_sort(int list[],int begin,int end) { for(int i=