经典算法学习——直接选择排序
直接选择排序和直接插入排序相似,都将数据分为有序区和无序区,所不同的是直接插入排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区。而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。演示样例代码上传至:https://github.com/chenyufeng1991/SelectSort
算法描写叙述例如以下:
(1)初始时,数组全为无序区为a[0...n-1]。
令i = 0。
(2)在无序区a[i...n-1]中选取一个最小的元素,将其与a[i]交换。
交换之后a[0...i]就形成了一个有序区。
(3)i++并反复第二步。直到i == n-1,排序完毕。
实现例如以下:
//
// main.c
// SelectSort
//
// Created by chenyufeng on 16/2/3.
// Copyright © 2016年 chenyufengweb. All rights reserved.
//#include <stdio.h>void selectSort(int *a,int n);
void swap(int *a,int *b);int main(int argc, const char * argv[]) {int a[] = {6,1,4,9,0,3};selectSort(a,6);for (int i = 0; i < 6 ; i++) {printf("%d ",a[i]);}return 0;
}void selectSort(int *a,int n){int i,j,minIndex;for (i = 0; i < n; i++) {minIndex = i;//从无序区中找出最小的数for (j = i + 1; j < n; j++) {if (a[j] < a[minIndex]) {//不断记录最小数的下标;minIndex = j;}}//把无序区中最小的数放到有序区的最后一个位置。swap(&a[i],&a[minIndex]);}
}void swap(int *a,int *b){int temp;temp = *a;*a = *b;*b = temp;
}
说明一下。直接选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。是一种不稳定的排序。
本文參考:http://blog.csdn.net/morewindows/article/details/6671824
经典算法学习——直接选择排序相关推荐
- 经典算法之直接选择排序
作者简介:大家好我是小唐同学(๑><๑),为梦想而奋斗的小唐,让我们一起加油!!! 个人主页:小唐同学(๑><๑)的博客主页 系列专栏:数据结构 博友们如果也是新手入门数据 ...
- 【学习挑战赛】经典算法之直接选择排序
活动地址:CSDN21天学习挑战赛 ✅作者简介:C/C++领域新星创作者,为C++和java奋斗中 ✨个人社区:微凉秋意社区
- 【经典算法学习-排序篇】直接选择排序
一.选择排序 1.基本概念和介绍 选择排序的核心思想是:每一趟从无序区中选出关键字最小(或最大)的元素,按顺序放在有序区的最后(生成新的有序区,无序区元素个数减1),直到全部排完为止. 换句话说就是: ...
- Java常见排序算法之直接选择排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- 《数据结构与算法》实验:排序算法实验比较——选择排序 堆排序
<数据结构与算法>实验和课程Github资源 <数据结构与算法>实验:线性结构及其应用--算术表达式求值 <数据结构与算法>实验:树型结构的建立与遍历 <数据 ...
- 第七讲. 经典算法之贪心选择
第七讲. 经典算法之贪心选择 1. 简介 2. 从一个简单例题开始 3. 一个稍难的题目 4. 最重要贪心算法(可作模板) 4.1 最小生成树 4.2 最短路 5. 最后说几句 1. 简介 贪心算法, ...
- 排序算法:简单选择排序算法实现及分析
简单选择排序算法介绍 简单选择排序(Simple Selection Sort)就是通过n-1次关键字排序之间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1<=i<=n)记 ...
- java选择排序代码_Java排序算法总结之选择排序
本文实例讲述了Java排序算法总结之选择排序.分享给大家供大家参考.具体分析如下: 选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部 ...
- Java排序算法之直接选择排序
Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...
最新文章
- 段永朝:界面——之内、之外与之间
- PowerDesigner导出
- codeforces 126B Password(哈希)
- mysql常用语句整理
- JavaScript操作DOM对象
- Java 8 Friday Goodies:精益并发
- python配置pip_Python pip源配置
- Android kernel Crash后,定位出错点的方法
- EMLOG复制网站文字提醒弹窗源码美化版
- 买什么手提电脑好_现在买什么手机好?
- MVVM架构~knockoutjs系列之验证信息自定义输出~续
- 怎样让公式编号不从1开始
- 史上最全电脑优化小技巧
- swift5.0 代码实现跳转页面Segue (performSegue and prepare)
- 古文选读161篇--蔡礼旭老师选
- 防灾科技学院GKCTF2020_misc wp
- 单神经元PID控制+Simulink控制系统仿真
- 如何修改jar包,并且能够运行,实操有效!
- android 桌面插件 语录,一句话心情语录app
- python去除不可见字符,如:\u200b
热门文章
- 【AI】caffe使用步骤(三):编写求解文件solver.prototxt
- python脚本 数据库压力测试_python-网站压力测试脚本
- java axis2 开发_基于Apache axis2开发Java Web服务
- 自己动手写cpu pdf_自己动手写 Promise
- php http_get_vars,$_GET($HTTP_GET_VARS)和$_POST($HTTP_POST_VARS)的区别
- r语言手动算两个C指数p值,如何用R语言进行Pvalue显著性标记?
- java中注解的使用_java中注解的使用
- java快排算法解读,java 快排的思路与算法
- 【java】兴唐第二十九节课作业
- Opencv4测试报错00007FFB3253A9C0 (ntdll.dll)处引发的异常: 0xC0000005: 读取位置 0x0000000000000010 时发生访问冲突