数据结构学习(十四)——选择排序
来源:互联网 发布:方向余弦矩阵微分方程 编辑:程序博客网 时间:2024/06/06 03:13
前篇的插入排序算法,为了给插入元素空出位置,经常要后移腾出位置而进行大量后移操作,如果是移动数据元素规模大的话,就会耗时降低效率。
插入排序操作特点:先确定排序对象,再确定插入位置。
选择排序操作特点:先确定排序位置,再确定排序对象。
选择排序大概流程就是从第一个元素开始,然后与后面的元素依次比较大小,比当前元素小的话就记下当前最小位置,继续比较,直到这轮比较完毕,这样就可以找出这一轮最小的元素,然后把此最小元素放入第一个元素位置。然后从第二个元素开始,继续上面的操作。最后就能排好序。
下面的代码实现了选择排序的操作练习。
#include <stdio.h>#define MAXSIZE 50void Select_sort(int *s, int n);int main(void){int n, i;int s[MAXSIZE + 1];printf("选择排序练习:\n");printf("输入想输入数据的个数:");scanf("%d", &n);getchar();printf("依次输入想输入的数据\n");for(i=1; i<=n; i++){scanf("%d", &s[i]);}Select_sort(s, n);printf("排序后的数据为:\n");for(i=1; i<=n; i++){printf("%d ",s[i]);}printf("\n");return 0;}void Select_sort(int *s, int n){int i, j, k;for(i=1; i<=n; i++){k = i;//假定当前元素为最小值for(j=i+1; j<=n; j++){if(s[j] < s[k]){k = j;//记录当前最小值的下标}}if(k != i)//把真正最小元素值放入正确位置{s[0] = s[k];s[k] = s[i];s[i] = s[0];}}}
选择排序的时间复杂度也跟数据多少成正比例,所以时间复杂度为O(n^2)
该算法主要两部分组成,一种是比较操作,一种是交换操作,进行一次交换操作相当于进行三次移动操作。但工作量还是比一次比较操作工作量小。该算法主要工作量为内层循环的比较操作。
选择排序也只需要一个备用单元,即数组下标为0的元素和3个辅助变量i,j,k。
选择排序不同于插入排序,只能用于静态排序。
- 数据结构学习(十四)——选择排序
- 数据结构 — 选择排序
- 数据结构学习--选择排序
- 14. 数据结构进阶十四排序实现之简单选择排序
- 数据结构——选择排序
- 数据结构——选择排序
- 数据结构——选择排序
- 数据结构学习9——简单选择排序
- 数据结构学习系类列十四-归并排序
- 数据结构&算法实践—【排序|选择排序】选择排序
- 数据结构学习之选择排序
- 数据结构例程——选择排序之直接选择排序
- 数据结构与算法学习——选择排序【使用上篇的冒泡排序】
- 【数据结构与算法】——选择排序
- 【数据结构与算法】——选择排序
- 数据结构跑路篇——选择排序
- 数据结构&算法实践—【排序|选择排序】堆排序
- java学习笔记(十四)冒泡与选择排序
- Java JVM 内存查看
- smdkc100之u-boot 2010.03代码的分析2
- 'CreateFileW' : cannot convert parameter 1 from 'const char [13]' to 'LPCWSTR'
- iOS学习之UITableView中Cell的操作
- mysql创建临时表,将查询结果插入已有表中
- 数据结构学习(十四)——选择排序
- struts2学习(一)类型转换--DefaultTypeConverter
- 视图,物化视图,更新
- Developer Road: The List
- 利用特征点(Brief,ORB,SIFT)进行图像匹配,模板匹配
- smdkc100之u-boot 2010.03代码的分析3
- 树转化成二叉树
- lua模块几种形式
- iOS学习之UIPickerView控件的关联选择