zoukankan      html  css  js  c++  java
  • 选择排序

    选择排序

    def pao1(alist):
        x = 1
       
        while x<=len(alist):
            index = 0
            for i in range(len(alist)-x):
                
                if alist[index] < alist[i+1]:
                    index = i+1
                    
            alist[len(alist)-x],alist[index] = alist[index],alist[len(alist)-x]
    
            x = x+1
        return alist   
    
    • 思路

    将乱序序列中的元素两两比较,找出最大值,然后直接将最大值放置到序列最后的位置,循环len(alist)-1的次数,但是当中,对比循环的时候,记得减去已得到最大值个数值得次数。

    #1.将乱序序列中的元素两两比较,找出最大值,然后直接将最大值放置到序列最后的位置
    alist = [3,8,5,7,6]
    def sort(alist):
    	max_index = 0
    	for j in range(len(alist)-1):  ##最大值元素的下标,一开始假设下标为0的元素为最大值
    		        if alist[max_index] < alist[i+1]:
                max_index = i+1
        #循环结束后max_index就一定是最大值的下标
        alist[len(alist)-1],alist[max_index] = alist[max_index],alist[len(alist)-1]
        return alist
    #   
    print(sort(alist))
    [3, 6, 5, 7, 8]
    
    #2.将步骤一继续作用n-1次即可
    
    alist = [3,8,5,7,6]
    def sort(alist):
        for j in range(len(alist)-1):
            max_index = 0 #最大值元素的下标,一开始假设下标为0的元素为最大值
            for i in range(len(alist)-1-j):
                if alist[max_index] < alist[i+1]:
                    max_index = i+1
            #循环结束后max_index就一定是最大值的下标
            alist[len(alist)-1-j],alist[max_index] = alist[max_index],alist[len(alist)-1-j]
        return alist
    #
    print(sort(alist)) 
    [3, 5, 6, 7, 8]
    

    选择排序和冒泡排序的区别:

    冒泡是每个元素( i )跟右边的元素(i + 1)对比,如果大于右边元素,交换位置,这样就可以获取最大值在新序列的尾部,循环n-1次这样的操作,获取新的有序序列,当然对比循环减去已获取最大值个数的数值相同的次数,就是已经得出来得最大值就不比了,浪费时间。

    if alist[i] > alist[i+1]:#如果前面的元素大于后面的元素,交换两个元素的位置 alist[i],alist[i+1] = alist[i+1],alist[i]

    选择排序是遍历整个列表,设置一个index索引为0,每次用该列表的索引值所在的元素跟循环遍历的元素比较,如果遍历的元素大于index索引所在元素的值,就将遍历的元素的索引(i+1)赋值给index,然后跟列表最后一个元素交换。这样就把最大值放到了列表最后一个,而冒泡是交换到最后一个。

    if alist[max_index] < alist[i+1] :

    max_index = i+1

  • 相关阅读:
    1. 第一章: Python基础语法
    6. 第二章:C#委托和事件之.net framework3.5委托扩展
    5. 第二章:C#委托和事件之事件
    4. 第二章:C#委托和事件之委托
    3. 第一章:C#面向对象编程之继承和多态
    2. 第一章:C#面向对象编程之抽象和封装
    1. 序言
    Xamarin.Forms 调用腾讯地图
    全国行政区划数据大放送——包含邮政编码-电话区号-简拼-区划路径
    【记录】自定义服务器验证控件
  • 原文地址:https://www.cnblogs.com/zzsy/p/12684835.html
Copyright © 2011-2022 走看看