文章目录

  • 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. 数据结构 - 简单选择排序法

    数据结构 - 简单选择排序法 在之前的博文里已经介绍过排序的两个基本方法: 双重循环法和冒泡排序法. 基本思想 其实上面两种方法的基本思想都是一样的: 就是将排序步骤分成两层循环, 在内层的每1个循环 ...

  2. 简单选择排序(C语言)

    数据结构总目录 简单选择排序 1. 图文解析 遍历序列,每次在当前位置向后扫描序列,记下最小值的位置,然后将最小值与当前位置的值交换 排序过程 序列:{ 5, 4, 3, 2, 1 } 从小到大排列 ...

  3. 简单选择排序——C语言实现

    选择排序思想:若按照递增顺序对顺序表进行排列,在n个元素的顺序表中,从第i(i=1)个元素开始遍历到第n-1个元素,在遍历过程中都将第i个元素依次与第i+1到第n个元素进行比较,确定最小的元素,如果最 ...

  4. 数据结构(C语言版)——简单选择排序(代码版)

    一.代码 #include <stdio.h> #include <stdlib.h>#define MAXSIZE 20 #define ERROR 0 #define OK ...

  5. 输入法按照选字频率排序的C语言程序算法,算法与数据结构之选择排序(C语言)...

    #include #include void SelectSort(int *a,int n);//预声明要调用的函数 int main(void) { int k; int x[]={,,,,,,, ...

  6. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  7. c语言用sort函数选择排序,简单选择排序(Simple Selection Sort)的C语言实现

    简单选择排序(Simple Selection Sort)的核心思想是每次选择无序序列最小的数放在有序序列最后 演示实例: C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章, ...

  8. C语言实现选择排序——简单选择排序算法

    C语言实现简单选择排序 文章目录 C语言实现简单选择排序 简单选择排序算法 1.交换操作 2.简单选择排序算法实现 项目完整代码 运行效果图 简单选择排序算法 1.交换操作 //交换实现 void s ...

  9. C语言实现各个排序算法(直接插入排序,折半插入排序,希尔排序,冒泡排序,简单选择排序)

    数据结构开发总结报告 --内部排序综合设计程序的编程实现 #include<stdio.h> #define MaxSize 20 #include<windows.h> ty ...

最新文章

  1. 清华计算机与科学系考研,清华计算机科学与技术系考研怎么复习
  2. TensorFlow--实现人脸识别实验精讲 (Face Recognition using Tensorflow)
  3. XCTF-Reverse:game(涉及异或脚本编写)
  4. 【Python】学习笔记总结5(Python垃圾回收及内存优化)
  5. 排序算法 —— 插入排序
  6. [object detection] TypeError: can't pickle dict_values objects
  7. django -- 实现ORM登录
  8. 如何安装python3.7.2_CentOS7下安装Python3及Pip3并保留Python2
  9. MCU —— 数码管显示笔记
  10. [转载]针对IIS7以上的ASP.NET网站自定义错误页面与异常日志总结
  11. Wineskin不能打开添加的程序?macOS版本太高?
  12. 怎么卸载虚幻4_专访Epic Games:虚幻引擎5离手游近在咫尺,中小团队也能很快上手...
  13. python绿色版_mPython最新下载_mPython绿色版 - 软件帝
  14. ogre1.9环境搭建
  15. Python制作翻译工具(程序员必备中英文翻译工具)
  16. 连锁定位(Linkage Mapping)与关联定位(Association Mapping)
  17. [转]服装店运营计划书__201
  18. android课程表删除课程,超级课程表话题删除方法
  19. Strom实时热力图展示项目
  20. 快过年了,给你的 commit 加上表情吧

热门文章

  1. interrupt 1 using 1
  2. 全国公共英语五级(PETS-5) 写作作文
  3. C# int与string转化
  4. awk和cut分割字符区别
  5. [综合面试] 大牛的面试神级总结之总结篇
  6. libQtCore.so.4相关错误
  7. Android短信验证
  8. Linux多线程——异步
  9. 页游开发_小花仙即将出手游,敬童年一起玩过的7K7K和4399
  10. spring cloud使用hystrix实现断路保护机制