博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
选择排序
阅读量:7205 次
发布时间:2019-06-29

本文共 2342 字,大约阅读时间需要 7 分钟。

1、简单选择排序:

1、给定一个列表

2、将列表赋值给nums
3、取列表nums的长度
4、迭代长度
5、定义一个maxindex,赋值i 假定i为最大值索引
6、迭代i+1-length 如果maxindex[i]的值小于nums[j] 将j赋给maxindex 然后nums[maxindex]就是最大值了
7、如果i不等于maxindex 就将nums[maxindex]交换给nums[i]将大值往前面排列

def selectsort(lst1):    nums = lst1    length = len(nums)    print(nums)    for i in range(length):        maxindex = i        for j in range(i+1, length):            if nums[j] > nums[maxindex]:                maxindex = j        if i !=maxindex :            nums[i], nums[maxindex] = nums[maxindex], nums[i]    print(nums)selectsort([1, 8, 9, 5, 6, 7, 4, 3, 2])

  打印结果:

  [1, 8, 9, 5, 6, 7, 4, 3, 2]

  [9, 8, 7, 6, 5, 4, 3, 2, 1]

2、二元选择排序:

二次选择排序,同时固定左边最大值和右边最小值

优点:
减少迭代元素的次数
1、length//2 ,减少迭代次数
2、由于使用了负索引,所以条件要增加 i == length+minindex

1、生成一个列表arr,赋值到nums,取nums的长度

2、迭代length//2 一半长度
3、定义maxindex 假设最大值 minindex假设最小值 min 为minindex初值
4、迭代i+1 - length-i 如果 nums[maxindex]<nums[j] 就把j的值赋给maxindex
如果nums[minindex]>num[-j-1] 使用负索引的形式,如果倒数第二位小于minindex 就把它赋值给minindex 使minindex为最小值
如果i!=maxindex 交换maxindex和i的值 ; (如果i==num[maxindex] or i == length+minindex,将maxindex赋值给minindex )-->如果
最小值是第一位或者最后一位就赋值给minindex length+minindex 负索引的格式
5、如果min != minindex 就交换minindex和min的值
6、输出打印nums

def tselect_sort(lst1):    nums = lst1    length = len(nums)    print(nums)    for i in range(length//2):        maxindex = i        minindex = -i -1        minvalue = minindex        for j in range(i + 1, length - i):            if nums[j] > nums[maxindex]:                maxindex = j            if nums[-j - 1] < nums[minindex]:                minindex = -j - 1       if nums[maxindex] == nums[minindex]:         break        if i!= maxindex:            nums[i], nums[maxindex] = nums[maxindex], nums[i]            if i == minindex or i == length + minindex:                minindex = maxindex        if minvale != minindex:             nums[minvalue], nums[minindex] = nums[minindex], nums[minvalue]    print(nums)lst1 = [1, 8, 9, 5, 6, 7, 4, 3, 2]tselect_sort(lst1)

  打印结果:

  [1, 8, 9, 5, 6, 7, 4, 3, 2]

  [9, 8, 7, 6, 5, 4, 3, 2, 1]

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

总结:
简单选择排序需要数据一轮轮比较,并在每一轮中发现极值
没有办法知道当前轮是否已经达到排序要求,但是可以知道
极值是否在目标索引位置上
遍历次数 1,……,n-1之和 n(n-1)/2
时间复杂度O(n^2)
减少了交换次数,提高了效率,性能略好于冒泡法

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

转载于:https://www.cnblogs.com/hkcs/p/7646791.html

你可能感兴趣的文章
HDU5988 Coding Contest(浮点费用流)
查看>>
css3文字溢出显示省略号
查看>>
Rugy 茶余饭后
查看>>
Linux shell中运行命令后加上字符“&”的作用
查看>>
MySQL存储引擎对比
查看>>
[Android Pro] AsyncTaskLoader vs AsyncTask
查看>>
[Linux] du-查看文件夹大小-并按大小进行排序
查看>>
转:numpy数据集练习——鸢尾花数据集
查看>>
把wcf服务,改成restful方式,以及吐槽
查看>>
SpatiaLite 各版本数据库差异
查看>>
Python变量和数据类型
查看>>
HTML(二)选择器
查看>>
C++ 类模板的使用
查看>>
AJAX编程-封装ajax工具函数
查看>>
Common Lisp学习笔记(九)
查看>>
一只菜鸡的话
查看>>
变量声明和定义的区别
查看>>
python之路之课后作业
查看>>
p4475 巧克力王国
查看>>
js中的Attribute
查看>>