选择排序
基本思想:
从待排数列中,选取一个最小(或最大)的数,和
第1位置的数交换,再从余下待排序数列中,选取最小(或最大)的一个数,和
第2个位置的数交换,直到第n-1(倒数第二个)个元素和第n(末尾)个元素比较
操作方法:
9 5 6 2 1 8
---------------------
第一趟:
1 5 6 2 9 8
第二趟:
1 2 6 5 9 8
第三趟:
1 2 5 6 9 8
第四趟
1 2 5 6 9 8
第五趟
1 2 5 6 8 9
时间复杂度:
第一次比较n-1次,第二次比较n-2次……最后比较1次,等差数列求和n^2/2
舍去最高项系数,O(n^2)
稳定性:
相同元素的相对位置变更,都是不稳定排序:如下
5(第一个), 8, 5(第二个), 1
选择排序:
1 8 5(第二个) 5(第一个)
python代码示例:select_sort.py
def select_min_key(l, i):
key = i
for j in range(i+1, len(l)):
if l[key] > l[j]:
key = j
return key
def select_sort(l):
for i in range(0, len(l)):
key = select_min_key(l, i)
if l[i] != l[key]:
tmp = l[i]
l[i] = l[key]
l[key] = tmp
if __name__ == '__main__':
l = [72,32,16,52,49,84,17,9,7,29]
select_sort(l)
print('result:'+str(l))
lua代码示例:select_sort.lua
function selectMinKey(t, i)
key = i
len = table.getn(t)
for j = i + 1, len do
if t[key] > t[j] then
key = j
end
end
return key
end
function select_sort(t)
len = table.getn(t)
for i = 1, len do
key = selectMinKey(t, i)
if t[i] ~= t[key] then
tmp = t[i]
t[i] = t[key]
t[key] = tmp
end
end
end
t = {71,26,53,52,47,9,58,49,2,77}
select_sort(t)
for _,v in ipairs(t) do
print(v)
end
分享到:
相关推荐
堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法...
排序算法:排序算法汇总--各类排序算法 冒泡,选择,插入,快排,归并,堆排
选择排序算法也是一种简单的排序算法,它的工作原理是通过选择最小或最大元素,并将其与第一个元素交换,以达到排序的目的。选择排序算法的时间复杂度也为O(n^2),因此它也适合小规模的数据排序。 3.插入排序算法 ...
(matlab代码)带约束条件的非支配排序遗传算法NSGA-II,解决了一个多目标优化问题 (matlab代码)带约束条件的非支配排序遗传算法NSGA-II,解决了一个多目标优化问题 (matlab代码)带约束条件的非支配排序遗传算法...
基于Pareto的非支配排序遗传算法II (PESA-II)是一种多目标进化优化算法,它利用了遗传算法的机制以及基于Pareto包络的选择。 PESA-II使用外部存档来存储近似的Pareto解决方案。 基于基于档案成员的地理分布创建的...
【排序算法】-常见的排序算法
将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。...本资源通过matlab实现合并排序、简单选择排序、快速排序、冒泡排序、直接插入排序5种常用的排序算法,并部分绘制代表算法原理的动图。
常用的排序算法--堆排序,通过创建堆的方法进行排序
各类排序算法整理--C语言描述--本人编写 排序算法种类有: 冒泡 快速排序 堆排序 希尔排序 插入排序 选择排序 二路归并排序
这里我们将深入探讨三种基本的排序算法:插值排序、选择排序和冒泡排序,这些都是在“sort.zip”压缩包文件中提供的实现。 **插值排序**是一种线性时间复杂度的排序算法,它基于插值搜索的概念。在插值排序中,我们...
本实验报告的主要目的是通过基数排序算法的实现来掌握三类内部排序的设计思想、适用范围与算法实现,并深入理解和掌握优化排序算法的设计思想和实现过程。 基数排序算法是按照数字的每一位来进行排序的。该算法的...
本篇文章主要探讨了如何在VC++环境中利用多线程技术来实现三种经典的排序算法:冒泡排序、快速排序和归并排序,并对它们的性能进行了比较。 首先,冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
在这个例子中,可能会有一个类`SortAlgorithms`包含各种排序算法的成员函数,如冒泡排序、选择排序、插入排序、快速排序等。另一个类`UserInterface`则负责处理用户交互和控制执行哪种排序算法。 3. **排序算法的...
本文将深入探讨标题和描述中提到的一些基本排序算法,包括选择排序、冒泡排序、插入排序、希尔排序、堆排序、快速排序以及归并排序,并结合C++编程语言进行讲解。 1. **选择排序(Selection Sort)** - 选择排序是一...
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...
此文件为数据结构中的九种排序算法,包含一些排序方法的过程,其九种排序包括:直接插入排序,折半插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序,基数排序!
快速排序算法的设计思想是,选择一个元素作为基准,将其放入适当位置后,把该元素划分成两部分,所有关键字比该元素关键字小的元素放置在前一部分,所有比它大的元素放置在后一部分,并把该元素排在这两部分的中间。...
实现经典的排序算法--R语言_sort-algorithm
经典排序算法 - 选择排序Selection sort 经典排序算法 - 鸡尾酒排序Cocktail sort 经典排序算法 - 希尔排序Shell sort 经典排序算法 - 堆排序Heap sort序 经典排序算法 - 地精排序Gnome Sort 经典排序算法 - ...