简单选择排序算法介绍

简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记录交换。这是一般书上的定义。实际上选择排序,就是每一轮选者一个最值出来,然后在剩下的数据中又选择一个最值出来,直到数据被选择完毕。这就是所谓的简单选择排序算法。

简单选择排序算法实现

在下面代码中,每一轮内循环完毕,记录最值下标,然后和起始值进行比较,如果不一样才交换值

记录最值下标才是最好的选择,以前在某些书上看到的,靠 ,直接在内层循环中交换值!这样效率肯定打折扣

注意:内层循环的起始位置为i+1 哟!

//选择排序 核心是记录最值下标
void SelectSort_Up(int *arr, int length)
{for (int i = 0; i < length-1; i++){int index = i;//记录最值下标for (int j = i + 1; j < length; j++){//升序if (arr[index] > arr[j]){index = j;}}if (i != index){Swap(&arr[i], &arr[index]);}}
}

简单选择排序算法复杂度分析

如果数组中有n个数据,外层的

第1轮循环是arr[0] 和arr[1] ...arr[n-1] 进行比较,次数为n-1 次,arr[0]放最值。

第2轮循环是arr[1] 和 arr[2]...arr[n-1] 进行比较,次数为n-2次,arr[1]放第二个最值。

所以不难得出它的比较的次数是n-1 + n-2 + n-3 + ....1 = n*(n-1)/2 。

时间复杂度为 = n^2/2- n/2 = n^2 ,O(n^2)

完整代码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSIZE 10//交换值
void Swap(int* a, int* b)
{int temp = *a;*a = *b;*b = temp;
}//选择排序 核心是记录最值下标
void SelectSort_Up(int *arr, int length)
{for (int i = 0; i < length-1; i++){int index = i;//记录最值下标for (int j = i + 1; j < length; j++){//升序if (arr[index] > arr[j]){index = j;}}if (i != index){Swap(&arr[i], &arr[index]);}}
}
//选择排序 核心是记录最值下标
void SelectSort_Down(int *arr, int length)
{for (int i = 0; i < length - 1; i++){int index = i;//记录最值下标for (int j = i + 1; j < length; j++){//降序if (arr[index] < arr[j]){index = j;}}if (i != index){Swap(&arr[i], &arr[index]);}}
}
//打印数组元素
void PrintArr(int* arr, int length)
{for (int i = 0; i < length; i++){printf("%d ", arr[i]);}printf("\n");return;
}int main(int argc, char *argv[])
{srand((size_t)time(NULL));//设置随机种子int arr[MAXSIZE] = { 0 };//给每个元素设置一个随机值for (int i = 0; i < MAXSIZE; i++){arr[i] = rand() % 11;}printf("排序前:\n");PrintArr(arr, MAXSIZE);printf("升序:\n");SelectSort_Up(arr,MAXSIZE);PrintArr(arr, MAXSIZE);printf("降序:\n");SelectSort_Down(arr, MAXSIZE);PrintArr(arr, MAXSIZE);return 0;
}

运行结果检测

排序算法:简单选择排序算法实现及分析相关推荐

  1. 排序算法之选择排序(简单选择排序、堆排序)

    选择排序(简单选择排序.堆排序) 选择排序 简单选择排序 概念 算法实现 堆排序 概念 算法实现 后续 选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ...

  2. java中的排序算法——简单选择排序,树形选择排序与堆排序(一)

    package com.sort; /**  * 选择排序:  * 简单选择排序,树形选择排序与堆排序  *   */ public class SelecSortDemo { /** * ----- ...

  3. 排序算法——简单选择排序(PythonJava)

    基本思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素( ...

  4. 数据结构排序算法——选择排序(简单选择排序)

    简单选择排序(Simple Selection Sort) 一.算法基本思想: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放 ...

  5. 排序算法-简单选择排序

    文章目录 1.基本介绍 2.选择排序的思想 3.选择排序思路分析图 4.代码实现 1.基本介绍 选择排序属于内部排序算法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 ...

  6. 排序算法 | 简单选择排序,算法的图解、实现、复杂度和稳定性分析

    今天讲解一下简单选择排序的原理以及实现.复杂度和稳定性分析 这个内容很简单,轻松加愉快,很快就过了~ 目录 简单选择排序 1 基本思想 2 动态图解 3 代码 4 复杂度分析 简单选择排序 1 基本思 ...

  7. 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)

    转载:http://blog.csdn.net/pzhtpf/article/details/7559943 3.简单选择排序 (1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换 ...

  8. 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板

    #include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=1e2+1; int a[ ...

  9. 选择排序:简单选择排序

    1. 选择排序思想 (1.1)选择排序的基本思想是:每一趟(例如第i趟)在后面n-i+1(i=1,2, ... , n)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做 ...

  10. [转载] python选择排序二元选择_选择排序:简单选择排序(Simple Selection Sort)

    参考链接: Python中选择排序Selection Sort 基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的 ...

最新文章

  1. face-swap.zip百度网盘下载
  2. 小功率荧光灯拆解分析
  3. 皮一皮:打完疫苗千万别睡太死...
  4. android jni打印log信息
  5. 学习Spring Boot:(九)统一异常处理
  6. 和我一起构建私有物联网云平台
  7. 华为智能手表WATCH GT2运动版和时尚版有什么区别?
  8. 【渝粤教育】国家开放大学2018年春季 0692-21T化工设备机械基础 参考试题
  9. 完全卸载Oracle方法(超详细)
  10. JNI基础:JNI数据类型和类型描述符
  11. 项目成功关键要素和项目成功关键要素
  12. 10款PHP开源电子商务系统
  13. Chart-制作饼图
  14. 虚拟机(VMware Workstation或Hyper-V)装ghost版系统提示“ntldr is missing Press Ctrl+Alt+del to Resta
  15. Xen、OpenVZ、KVM、Hyper-V、VMWare虚拟化技术介绍
  16. 计算机中心对临床质量考核标准,三级公立医院绩效考核第13项指标室间质量评价的解读...
  17. 挂载文件系统和查找文件
  18. continue在while循环的使用,禁忌
  19. 免费、强大的开源笔记软件Joplin综合评测 —印象笔记的开源替代
  20. 药品过5关价翻12倍 批发商抢走药品一半利润

热门文章

  1. 鸿蒙济判法讲义,2020-02-09《薛兆丰经济学讲义》读书笔记
  2. Android学习之网上商城(上)
  3. 【ES9(2018)】for await...of
  4. Java笔记-CXF增加拦截器与自定义拦截器
  5. Python笔记-使用uiautomator2编写某APP注册机
  6. Java笔记-腾讯验证码平台使用实例
  7. 系统架构师学习笔记-分布式系统
  8. C++工作笔记-对继承的进一步认识
  9. C/C++中Windows API 简单的(Callback)回调机制
  10. SQL基础E-R图画法(三)