选择(select)排序算法
来源:互联网 发布:linux 批量删除文件夹 编辑:程序博客网 时间:2024/06/05 00:46
直接排序是不稳定的排序。
1、直接排序算法的基本思想
n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。
(1) 初始状态:无序区为A[1...n],有序区为空。
(2) 第一趟排序:在无序区A[1...n]中选出最小的记录A[k],将他与无序区的第一个记录A[1]交换,使A[1...1]和A[2...n]分别变为记录个数增加1的新有序区和记录个数减少1的新无序区。
(3)第i趟排序:第i趟排序开始时,当前有序区和无序区分别为A[1.,.i-1]和A[i...n](1<=i<=n-1)。该趟排序从当前无序区中选出关键字最小的记录A[K],将它与无序区的第一个记录A[I]交换,使A[1...n]和A[I+1...n]分别变为记录个数增加1的新有序区和记录个数减少1的新无序区。这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。直接选择排序是不稳定的排序算法。
2、思想
首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。具体做法是:选择最小的元素与未排序部分的首部交换,使得序列的前面为有序。
3、算法复杂度
最好情况下:交换0次,但是每次都要找到最小的元素,因此大约必须遍历N*N次,因此为O(N*N)。减少了交换次数!
最坏情况下,平均情况下:O(N*N)
4、稳定性
由于每次都是选取未排序序列A中的最小元素x与A中的第一个元素交换,因此跨距离了,很可能破坏了元素间的相对位置,因此选择排序是不稳定的!
5、代码实现
//编程实现选择排序//顾名思义,选择排序是无序区中选择最小的一个元素放在第一位置,次小的元素放到第二个位置。//1.选择第一个元素即a[0]为临时元素为最小,遍历后面的元素与之比较,只要出现比tempMin小的数a[j],将a[j]赋值给tempMin。//2.将第一个元素与后面最小元素的位置进行交换(a[l]=a[i]),最小元素放到第一个元素位置上。//3.重复上述操作,直至将整个数组遍历一遍,i=0;i<len-1,i++;内层循环为j=i+1;j<len;j++.#include<iostream>using namespace std;void select_sort(int a[], int len){int i,j,l, tempMin;for (i = 0; i < len-1; i++)<span style="white-space:pre"></span>//对0~len-2进行循环,进行len-1次{tempMin = a[i];//每次都取无序区的第一个数为临时最小数l = i;//记录临时最小数的下标(无序区第一个元素下标)for (j = i+1; j < len; j++)<span style="white-space:pre"></span>//从i+1的位置(临时最小数的后一位)向数组尾部进行遍历{if (a[j] < tempMin)//无序区+1到数组尾部有小于临时最小数{tempMin = a[j];//tempMin保存每次遍历搜索到的最小数l = j;//l记录最小数的位置}}a[l] = a[i];//把最小元素与a[i](无序区第一个元素)进行交换a[i] = tempMin;}}static void print_array(int a[], int len){for (int i = 0; i < len; i++)<span style="white-space:pre"></span>//打印数组{cout << a[i] << " ";}}void main9mianshiti5(){int a[] = { 54, 38, 96, 23, 15, 72, 60, 45, 83 };cout << "before select sort:";print_array(a, 9);select_sort(a, 9);//选择排序cout << "\nafter select sort:";print_array(a, 9);system("pause");}
6、测试结果
before select sort:54 38 96 23 15 72 60 45 83
after select sort:15 23 38 45 54 60 72 83 96
- 选择(select)排序算法
- 算法----选择排序(select sort)
- JAVA排序算法实现代码-选择(Select)式排序
- 排序算法(三)直接选择排序(Straight Select Sorting)
- 选择排序----select sort
- 选择排序(select sort)
- 选择排序Select Sort
- 选择排序select
- 选择排序-Select Sort
- 选择排序 select sort
- [排序] 选择排序(Select Sort)
- 快速选择select算法
- 排序算法-选择排序
- 排序算法-选择排序
- 排序算法--选择排序
- 排序算法---选择排序
- 排序算法-选择排序
- 排序算法-选择排序
- Anatomy of an Elasticsearch Cluster part.1——深度解析ElasticSearch(1)
- VS2013 多个项目添加引用
- pthread_join与pthread_deatch和分离线程的关系
- 理解JVM——Java内存区域
- J2EE
- 选择(select)排序算法
- git使用简明教程
- kindeditor-4.1.10网页编辑器的使用
- spark 1.6.0 core源码分析6 Spark job的提交
- JSP
- rabbitMQ guest账号登录总是提示失败
- Fragment有参构造提示Avoid non-default constructors in fragments: 解决方案
- Virtex-6 Clock 资源
- JavaBean及其使用