数据结构-简单选择排序(C语言)
文章目录
- 1.基本思想:
- 2.例子讲解:
- 3.代码实例C语言:
- 4.时间复杂度分析
1.基本思想:
第i趟排序开始时,当前有序区和无序区分别为R[0…i-1],R[i…n-1] (0<=i<n-1),该趟排序是从当前无序区中选出关键字最小的元素R[k],将它与无序区的第一个元素R[i]交换,使R[0…i]为新的有序区,R[i+1…n-1]为新的无序区
2.例子讲解:
49, 38, 65, 97, 76, 13, 27
一开始的无序区就是上面的所有数49, 38, 65, 97, 76, 13, 27
,有序区默认没有
第一次从无序区中找到最小元素13和无序区第一个元素49交换位置,新的无序区为 38, 65, 97, 76, 49, 27
新的有序区为:13
以此类推
图片来自网络
3.代码实例C语言:
#include<stdio.h>
#define LENGTH 6void simpleSort(int disorder[],int length) {int min_index = 0;int temp = 0;for(int i = 0;i<length;i++) {min_index = i;//令i为最小下标min_indexfor(int j = i+1;j<length;j++) {if(disorder[j]<disorder[i]) {//每次遍历找到最小值的下标min_index = j;}}if(min_index!=i) {//如果发现了比min_index下标还小的元素,就交换i下标与min_index下标的值temp = disorder[i];disorder[i] = disorder[min_index];disorder[min_index] = temp;}}
}void main() {int disorder[] = {49, 38, 65, 97, 76, 13, 27};//无序区simpleSort(disorder, LENGTH);for(int i = 0;i<LENGTH;i++) {printf("%d ",disorder[i]);}}
换种数据结构书上的那种写法:
#include<stdio.h>
#define LENGTH 6typedef struct {int key;
}RecType;void simpleSort(RecType disorder[],int length) {int min_index = 0;RecType temp;for(int i = 0;i<length;i++) {min_index = i;//令i为最小下标min_indexfor(int j = i+1;j<length;j++) {if(disorder[j].key<disorder[i].key) {//每次遍历找到最小值的下标min_index = j;}}if(min_index!=i) {//如果发现了比min_index下标还小的元素,就交换i下标与min_index下标的值temp = disorder[i];disorder[i] = disorder[min_index];disorder[min_index] = temp;}}
}void main() {RecType disorder[7] = {{49}, {38}, {65}, {97}, {76}, {13}, {27}};//无序区simpleSort(disorder, LENGTH);for(int i = 0;i<LENGTH;i++) {printf("%d ",disorder[i]);}}
输出结果如下
4.时间复杂度分析
1.平均时间复杂度:O(n²)
2.空间复杂度:O(n)
在简单选择排序算法中simpleSort()
函数中使用i、j、k和temp 这4个辅助变量,与问题规模n无关,被调用后资源释放,而主函数中int disorder[] = {49, 38, 65, 97, 76, 13, 27}
定义了一个数组,并分配空间,故空间复杂度为O(n)
推荐链接:https://cuijiahua.com/blog/2017/12/algorithm_5.html
数据结构-简单选择排序(C语言)相关推荐
- 数据结构 - 简单选择排序法
数据结构 - 简单选择排序法 在之前的博文里已经介绍过排序的两个基本方法: 双重循环法和冒泡排序法. 基本思想 其实上面两种方法的基本思想都是一样的: 就是将排序步骤分成两层循环, 在内层的每1个循环 ...
- 简单选择排序(C语言)
数据结构总目录 简单选择排序 1. 图文解析 遍历序列,每次在当前位置向后扫描序列,记下最小值的位置,然后将最小值与当前位置的值交换 排序过程 序列:{ 5, 4, 3, 2, 1 } 从小到大排列 ...
- 简单选择排序——C语言实现
选择排序思想:若按照递增顺序对顺序表进行排列,在n个元素的顺序表中,从第i(i=1)个元素开始遍历到第n-1个元素,在遍历过程中都将第i个元素依次与第i+1到第n个元素进行比较,确定最小的元素,如果最 ...
- 数据结构(C语言版)——简单选择排序(代码版)
一.代码 #include <stdio.h> #include <stdlib.h>#define MAXSIZE 20 #define ERROR 0 #define OK ...
- 输入法按照选字频率排序的C语言程序算法,算法与数据结构之选择排序(C语言)...
#include #include void SelectSort(int *a,int n);//预声明要调用的函数 int main(void) { int k; int x[]={,,,,,,, ...
- C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】
目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...
- c语言用sort函数选择排序,简单选择排序(Simple Selection Sort)的C语言实现
简单选择排序(Simple Selection Sort)的核心思想是每次选择无序序列最小的数放在有序序列最后 演示实例: C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章, ...
- C语言实现选择排序——简单选择排序算法
C语言实现简单选择排序 文章目录 C语言实现简单选择排序 简单选择排序算法 1.交换操作 2.简单选择排序算法实现 项目完整代码 运行效果图 简单选择排序算法 1.交换操作 //交换实现 void s ...
- C语言实现各个排序算法(直接插入排序,折半插入排序,希尔排序,冒泡排序,简单选择排序)
数据结构开发总结报告 --内部排序综合设计程序的编程实现 #include<stdio.h> #define MaxSize 20 #include<windows.h> ty ...
最新文章
- 清华计算机与科学系考研,清华计算机科学与技术系考研怎么复习
- TensorFlow--实现人脸识别实验精讲 (Face Recognition using Tensorflow)
- XCTF-Reverse:game(涉及异或脚本编写)
- 【Python】学习笔记总结5(Python垃圾回收及内存优化)
- 排序算法 —— 插入排序
- [object detection] TypeError: can't pickle dict_values objects
- django -- 实现ORM登录
- 如何安装python3.7.2_CentOS7下安装Python3及Pip3并保留Python2
- MCU —— 数码管显示笔记
- [转载]针对IIS7以上的ASP.NET网站自定义错误页面与异常日志总结
- Wineskin不能打开添加的程序?macOS版本太高?
- 怎么卸载虚幻4_专访Epic Games:虚幻引擎5离手游近在咫尺,中小团队也能很快上手...
- python绿色版_mPython最新下载_mPython绿色版 - 软件帝
- ogre1.9环境搭建
- Python制作翻译工具(程序员必备中英文翻译工具)
- 连锁定位(Linkage Mapping)与关联定位(Association Mapping)
- [转]服装店运营计划书__201
- android课程表删除课程,超级课程表话题删除方法
- Strom实时热力图展示项目
- 快过年了,给你的 commit 加上表情吧