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

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

排序算法之选择排序

1.选择排序介绍

选择排序分为三种,直接选择排序、树形选择排序、堆排序。直接选择排序和堆排序是不稳定排序,树形选择排序是稳定排序。在这里介绍的是直接选择排序。其他的后面再分析。

直接选择排序算法思想:第一趟从n个元素的数据序列中选出关键字最小/大的元素并放在最前/后位置,下一趟从n-1个元素中选出最小/大的元素并放在最前/后位置。以此类推,经过n-1趟完成排序。

2.选择排序算法分析

直接选择排序的最好时间复杂度和最差时间复杂度都是O(n²),因为即使数组一开始就是正序的,也需要将两重循环进行完,平均时间复杂度也是O(n²)。空间复杂度为O(1),因为不占用多余的空间。直接选择排序是一种原地排序(In-place sort)并且定(stable sort)的排序算法,优点是实现简单,占用空间小,缺点是效率低,时间复杂度高,对于大规模的数据耗时长。

算法步骤:
  • 第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;
  • 第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;
  • 以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕

3.选择排序算法从实现到优化

V1.0

template 
void SelectionSort2(T a[], int len){ for(int i = 0; i < len; i++) { int MinIndex = i; for(int j = i+1; j < len; j++) { if(a[MinIndex] < a[j]) { MinIndex = j; } } swap(a[MinIndex], a[i]); }}

4.选择排序多种场景下的测试

int main() {    int N = 20000;    //稀疏数组,随机性大    int *arr1 = SortTestHelper::CreateRandomArray(N, 0, 1000000);    SortTestHelper::testSort("SelectionSort", SelectSortFunc::SelectionSort2, arr1, N);    //近乎有序    int *arr2 = SortTestHelper::CreateRandomArray(N, 0, 100);    SortTestHelper::testSort("SelectionSort", SelectSortFunc::SelectionSort2, arr2, N);    //基本有序    int *arr3 = SortTestHelper::CreateRandomArray(N, 0, 10);    SortTestHelper::testSort("SelectionSort", SelectSortFunc::SelectionSort2, arr3, N);    delete[] arr1;    delete[] arr2;    delete[] arr3;    return 0;}
测试结果:

SelectionSort : 0.424071s

SelectionSort : 0.416928s
SelectionSort : 0.410701s

根据结果表明,选择排序是一种稳定的排序算法,在随机性很大和近乎有序,有序的情况下算法的时间复杂度基本不变。但是这也是一个劣势,效率较差。

转载于:https://www.cnblogs.com/liangjf/p/8764474.html

你可能感兴趣的文章
云栖科技这家公司切入企业级文档云市场,希望解决移动和安全两个痛点
查看>>
在用苹果Mac OS X操作系统吗?那你得小心了……
查看>>
2014年11月11日
查看>>
秒杀WiFi 新技术让你一秒下载23部电影
查看>>
物联网时代三大标准齐头并进 互为补充
查看>>
阿里云成为Linux基金会金牌会员
查看>>
大数据时代 数据中心面临三大挑战
查看>>
《网络空间欺骗:构筑欺骗防御的科学基石》一3.3.4 识别和量化恶意软件的指标...
查看>>
自动化是任何云计算的基础
查看>>
密码提取神器 mimikatz 现已支持Windows 10 RS2
查看>>
老生常谈数据中心节能
查看>>
Check Point 指出2016 下半年勒索软件倍增
查看>>
微服务和容器对企业带来什么样的影响?
查看>>
如何掌握好应用程序的数据和未来发展
查看>>
“免费WiFi午餐”到底要怎么“吃”?
查看>>
2016首都网络安全日系列活动之打击电信网络诈骗宣传体验展
查看>>
Python vs R : 在机器学习和数据分析领域中的对比
查看>>
利用大数据发展业务的五个维度
查看>>
基于机器学习方法对销售预测的研究
查看>>
Linux桌面系统的优势
查看>>