排序算法:简单选择排序算法实现及分析
简单选择排序算法介绍
简单选择排序(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;
}
运行结果检测
排序算法:简单选择排序算法实现及分析相关推荐
- 排序算法之选择排序(简单选择排序、堆排序)
选择排序(简单选择排序.堆排序) 选择排序 简单选择排序 概念 算法实现 堆排序 概念 算法实现 后续 选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ...
- java中的排序算法——简单选择排序,树形选择排序与堆排序(一)
package com.sort; /** * 选择排序: * 简单选择排序,树形选择排序与堆排序 * */ public class SelecSortDemo { /** * ----- ...
- 排序算法——简单选择排序(PythonJava)
基本思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素( ...
- 数据结构排序算法——选择排序(简单选择排序)
简单选择排序(Simple Selection Sort) 一.算法基本思想: 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放 ...
- 排序算法-简单选择排序
文章目录 1.基本介绍 2.选择排序的思想 3.选择排序思路分析图 4.代码实现 1.基本介绍 选择排序属于内部排序算法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 ...
- 排序算法 | 简单选择排序,算法的图解、实现、复杂度和稳定性分析
今天讲解一下简单选择排序的原理以及实现.复杂度和稳定性分析 这个内容很简单,轻松加愉快,很快就过了~ 目录 简单选择排序 1 基本思想 2 动态图解 3 代码 4 复杂度分析 简单选择排序 1 基本思 ...
- 程序员必知的8大排序(二)-------简单选择排序,堆排序(java实现)
转载:http://blog.csdn.net/pzhtpf/article/details/7559943 3.简单选择排序 (1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换 ...
- 直接插入排序,折半插入排序,希尔排序,简单选择排序,冒泡排序,快速排序模板以及比较次数与移动次数的分析,折半搜索算法模板
#include<stdio.h> #include<time.h> #include <stdlib.h>const int maxx=1e2+1; int a[ ...
- 选择排序:简单选择排序
1. 选择排序思想 (1.1)选择排序的基本思想是:每一趟(例如第i趟)在后面n-i+1(i=1,2, ... , n)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做 ...
- [转载] python选择排序二元选择_选择排序:简单选择排序(Simple Selection Sort)
参考链接: Python中选择排序Selection Sort 基本思想: 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的 ...
最新文章
- face-swap.zip百度网盘下载
- 小功率荧光灯拆解分析
- 皮一皮:打完疫苗千万别睡太死...
- android jni打印log信息
- 学习Spring Boot:(九)统一异常处理
- 和我一起构建私有物联网云平台
- 华为智能手表WATCH GT2运动版和时尚版有什么区别?
- 【渝粤教育】国家开放大学2018年春季 0692-21T化工设备机械基础 参考试题
- 完全卸载Oracle方法(超详细)
- JNI基础:JNI数据类型和类型描述符
- 项目成功关键要素和项目成功关键要素
- 10款PHP开源电子商务系统
- Chart-制作饼图
- 虚拟机(VMware Workstation或Hyper-V)装ghost版系统提示“ntldr is missing Press Ctrl+Alt+del to Resta
- Xen、OpenVZ、KVM、Hyper-V、VMWare虚拟化技术介绍
- 计算机中心对临床质量考核标准,三级公立医院绩效考核第13项指标室间质量评价的解读...
- 挂载文件系统和查找文件
- continue在while循环的使用,禁忌
- 免费、强大的开源笔记软件Joplin综合评测 —印象笔记的开源替代
- 药品过5关价翻12倍 批发商抢走药品一半利润
热门文章
- 鸿蒙济判法讲义,2020-02-09《薛兆丰经济学讲义》读书笔记
- Android学习之网上商城(上)
- 【ES9(2018)】for await...of
- Java笔记-CXF增加拦截器与自定义拦截器
- Python笔记-使用uiautomator2编写某APP注册机
- Java笔记-腾讯验证码平台使用实例
- 系统架构师学习笔记-分布式系统
- C++工作笔记-对继承的进一步认识
- C/C++中Windows API 简单的(Callback)回调机制
- SQL基础E-R图画法(三)