选择排序思路:找到乱序数组中最大元素的位置,再与乱序数组中最后一个元素位置交换,即算完成一次选择排序,再从剩下的数中找最大与剩下乱序数组中最后一个元素位置交换以此循环到排序结束

#include<stdio.h>

#define N 6

//findMaxPos找数组中最大元素位置的函数

int findMaxPos(int arr[], int n)

{

int max = arr[0];//假设最大数为arr[0]

int pos = 0;//pos表示为,=0表示为假设最大值数的位置

int i;

for (i = 1; i < n; i++)

{

if (arr[i] > max)

{

max = arr[i];//实现max与数组中的每个元素比较

pos = i;//i即可以表示循环次数也可以表示数组元素位置

}

}

return pos;

}

//selectionSort实现选择排序即位置交换

void selectionSort(int arr[], int n)

{

while (n > 1)

{

int pos = findMaxPos(arr, n);//得到最大值的位置

int temp = arr[pos];

arr[pos] = arr[n - 1];//最大一个元素与最后一个元素交换位置

arr[n - 1] = temp;

n--;

//n--目的是缩小范围让剩下的元素进行交换位置

//当n不能在缩减时不再交换,即完成排序

}

}

int main()

{

int i, arr[N];

printf("请输入一组乱序的%d个数:\n", N);

for (i = 0; i < N; i++)

{

scanf_s("%d", &arr[i]);

}

selectionSort(arr, N);

printf("排序后的数为:");

for (i = 0; i < N; i++)

{

printf("%d ", arr[i]);

}

return 0;

}

选择排序----详细算法分析相关推荐

  1. 选择排序由浅到深详细分析和图解

    分析过程 代码执行结果: 详细代码实现: package july.star.select; /*** 选择排序:* 从0索引开始,一次和后面元素比较,小的往前放,* 第一次完毕,最小值 出现在了最小 ...

  2. 直接插入排序 希尔排序 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 基数排序的算法分析和具体实现 ...

    排序分为内部排序和外部排序 内部排序是把待排数据元素全部调入内存中进行的排序. 外部排序是因数量太大,把数据元素分批导入内存,排好序后再分批导出到磁盘和磁带外存介质上的排序方法. 比较排序算法优劣的标 ...

  3. 选择排序法——超详细的总结

    之前在我的博文中详细介绍了冒泡排序,它的基本思想是:每次比较相邻两个数的大小,只要逆序(和题意要求的顺序相反),就交换两个数:这样交换的次数繁多!而选择排序法就避免了这个问题. 选择排序的基本思想: ...

  4. java 排序原理_简单选择排序算法原理及java实现(超详细)

    简单选择排序的原理 简单选择排序的原理非常简单,即在待排序的数列中寻找最大(或者最小)的一个数,与第 1 个元素进行交换,接着在剩余的待排序的数列中继续找最大(最小)的一个数,与第 2 个元素交换.以 ...

  5. 选择排序java从小到大代码_java中选择排序与归并排序的内容,详细解析

    上次我们已经为大家介绍过java中插入.分治和快速排序的内容,今天再来为大家介绍一下java中选择排序与归并排序的具体内容,并且通过实际的代码为大家解析. 首先我们需要了解的是,选择排序也是一种简单直 ...

  6. 算法分析-插入排序INSERT_SORT与选择排序SELECT_SORT【线性方法】

    1 var A = [5, 2, 4, 6, 1, 3]; 2 console.log("排序前-:") 3 A.forEach(function (element, index, ...

  7. 【C语言】选择排序从小到大,从大到小,详细注释

    前言 选择排序算法通过选择和交换来实现排序,其排序流程如下: (1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换. (2)接着从剩下的n-1个数据中选择次小的1个元素,将其和第2 ...

  8. 基于Python的数据结构实验——内排序(直接插入排序,希尔排序,冒泡排序,快速排序,选择排序,堆排序,归并排序)(附详细代码和注释)

    创建名为 prac10.py 的文件,在其中编写一个顺序表的类,该类必须至少含有两个 成员变量(关键字和其他信息)及相关的基本操作,具体如下. 初始化一个顺序表 SSequenceList. 通 过 ...

  9. 选择排序超详细讲解C语言

    文章目录 算法步骤 动图演示 静图演示 代码实现 普通 升级 复杂度.稳定性分析 选择排序是一种简单直观的排序算法,无论数据是否有序,该排序的时间复杂度恒为 O(N2)O(N^{2})O(N2),所以 ...

最新文章

  1. html 甘特图_甘特图该如何部署
  2. 基础数据结构【三】————老鼠走迷宫问题————堆栈应用
  3. SpringMVC(三):使用 POJO 对象绑定请求参数值
  4. 美国大学录取时如何考察学生的背景
  5. 解读ADC采样芯片(EV10AQ190A)的工作模式(四通道模式)
  6. UVa1388 - Graveyard
  7. java 导入world数据_java读取world文件,把world文件中的内容,原样输出到页面上。...
  8. outlook阅读html,Outlook HTML邮件中英文混排字体设置
  9. 【实战】K8S部署Nacos微服务
  10. 常用T-Code总结
  11. 好久没弄数学了,一本书上出现了,应该是指代了什么意思,问下.
  12. Java的序列化特性将要退出历史舞台了
  13. 中国城市名单拼音排序(json)
  14. 全新APP软件游戏应用网站源码+支持WAP/Pbootcms内核
  15. ubuntu系统压力测试工具--stress
  16. 大学计算机课程日记,大学计算机实习日记
  17. 通过淘宝数据学习爬虫,python scrapy requests与response对象
  18. 《移动互联:用户体验设计指南》读书笔记4——移动UX模式
  19. 【jQWidgets】API 笔记
  20. 烦人的弹窗Placing the unmodified “important.txt“ in the zip file with the agent jar in the same

热门文章

  1. jquer案例2:改变元素的样式、复选框、下拉框 省份的选择
  2. redis 系列7 数据结构之跳跃表
  3. json串转成list
  4. description
  5. 网络流24题之最长k可重区间集问题
  6. C语言之局部变量全局变量变量存储方式
  7. 从0开始架构一个IOS程序—— 05— NavigationBar 搭建首页面
  8. AsyncTask异步加载的源码分析与实现实例
  9. Oracle 数据库的基本用法
  10. 正则表达式2--re方法--match()--search()