选择排序,C语言实现
选择排序是不稳定排序,时间复杂度为O(n^2)。
选择排序类似插入排序,把数组分为两部分,一部分已经排好序,一部分未排序。
刚开始的时候所有的元素都未排序,已排序的部分为空。就好像你手里有十张牌,左手有零张,右手有10张。每次从右手的牌中取最小的一张插入到左手的牌末尾,右手的牌插完了,排序也完成了。
选择排序虽然和冒泡排序同为时间复杂度O(n^2)级别的排序,但是它的移动次数少,最多交换n-1次,所以适合尽可能少移动元素的排序,比方说码头集装箱排序,移动集装箱的成本很高,要尽可能少移动。
选择排序代码如下:
#include <stdio.h>
void choseSort(int arr[], int n) {
int i, j;
int min, temp;
// 每次从未排序的部分选出一个最小的元素,最后一次只剩一个元素未排序
// 此时实际上已经排好序,故只需要n-1次外层大循环
for (i = ; i < n - ; ++i) {
min = i; // 假定未排序部分的第一个元素为最小的元素
// 遍历剩下的部分,找到最小的元素
for (j = i + ; j < n; ++j) {
if (arr[j] < arr[min]) {
min = j;
}
}
// 如果第一个元素就是最小的元素,就不需要交换了
if (min != i) {
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
int main() {
int i = ;
int arr[] = {, , , , , , , , , };
choseSort(arr, );
for (i = ; i < ; ++i) {
printf("%d ", arr[i]);
}
return ;
}

选择排序,C语言实现的更多相关文章
- 选择排序_C语言_数组
选择排序_C语言_数组 #include <stdio.h> void select_sort(int *); int main(int argc, const char * argv[] ...
- 排序算法——选择排序(js语言实现)
选择排序:顾名思义选择,选择排序属于O(N^2)的排序算法,意思就是选择数组中的最小的拿出来放在第一位,然后再剩下的数里面,选择最小的,排在第二位,以此类推. 例如:8 3 4 5 6 2 ...
- 排序(1)---------选择排序(C语言实现)
选择排序的基本思想: 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理例如以下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...
- 选择排序——C语言
选择排序 1.算法描述 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾.以此类推,直到所有元素均排序完毕(放 ...
- 选择排序C语言版本
算法思路,从头至尾扫描序列. 首先从第二个到最后,找出最小的一个元素,和第一个元素交换: 接着从第三个到最后,后面找出最小的一个元素,和第二个元素交换: 依次类推最终得到一个有序序列. void Se ...
- 简单选择排序(Simple Selection Sort)的C语言实现
简单选择排序(Simple Selection Sort)的核心思想是每次选择无序序列最小的数放在有序序列最后 演示实例: C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp) 原创文章, ...
- 冒泡排序和选择排序(Go语言实现)
冒泡排序和选择排序是排序算法中比较简单和容易实现的算法.冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端.而选择排序的思想也很直观:每一次排序 ...
- 选择排序的3种语言实现方法(C java python)
1.选择排序的思路是:遍历数组,第一遍找出所有成员的最小值,放到数组下标为0的位置,第二遍从剩余内容中,再次找出最小值,放到数组下标为1的位置,以此类推,遍历完成所有的数组内容,最后结果就是:数组是按 ...
- C语言学习之选择排序
上一篇文章中讲C语言排序中的比较常见的(交换)冒泡排序,那么这篇文章也将以新手个人的经历来讲同样比较常见而实用的数组排序之选择排序. 选择排序,从字面上看是通过选择来进行排序.其实它的用法就是通过选择 ...
- 基于python语言的经典排序法(冒泡法和选择排序法)
前 每逢周末就遇雨期,闲暇之余,捣鼓了下python,心心念想学习,今天就在电脑上装了个2.7,学习了下经典算法,冒泡与选择排序法 第一次写关于python的文章,说的不当之处,多多指正,我积极改正 ...
随机推荐
- 【Leetcode】【Medium】Validate Binary Search Tree
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- 如何在Windows 7/8/10中使用热键来调整音量?
有时,您需要一个热键来调整Windows PC中的音量.例如:播放全屏视频或游戏时需要调整音量. 有一个简单的方法可以做到: 安装并运行Perfect Hotkey软件. 配置键盘快捷键以进行音量 ...
- 科普文:从人人网看网络科学(Network Science)的X个经典问题
转:https://zr9558.wordpress.com/2013/12/05/科普文:从人人网看网络科学(network-science)的x个经典问/ 长文,写了N个小时写完的.你肯定能看懂, ...
- 警告: Request method 'POST' not supported的原因之一
警告: Request method 'POST' not supported是经常遇到的,这里记录一下我经常遇到的一种情况,以免忘记. 我使用拦截器拦截所有请求,然后列出不拦截的请求.有时候由于自己 ...
- 【转】android 常用theme
android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式android:theme="@android ...
- 3springboot:springboot配置文件(外部配置加载顺序、自动配置原理,@Conditional)
1.外部配置加载顺序 SpringBoot也可以从以下位置加载配置: 优先级从高到低 高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置 1.命令行参数 所有的配置都可以在命令行上进行指定 ...
- 2019.1.6 2.8 Spring的AOP事务
2.8 Spring的AOP事务 xml配置aop事务 先applicationContext.xml 文件 配置事务管管理器 配置通知 织入目标对象
- 关于webstorm打开项目,文件下方出现了一个小锁的图标,修改文件出现“cannot modify a ready-only directory”的弹窗提示
今天用webstorm打开项目,文件下方出现了一个小锁的图标,修改文件出现“cannot modify a ready-only directory”的弹窗提示 解决办法:运行 sudo chown ...
- Mac--查看公钥
打开macbook的终端输入以下命令: $ cd ~/.ssh $ ls $ cat id_rsa.pub
- YUV display in OpenGL
http://stackoverflow.com/questions/1106741/need-help-with-yuv-display-in-opengl I am having trouble ...