排序算法——选择排序
来源:互联网 发布:sql删除视图数据 编辑:程序博客网 时间:2024/06/06 02:28
1. 算法概述
选择排序是对冒泡排序的一种改进。选择排序(Selection Sort)的基本思想是:每一趟在n-i+1(i=1,2,...,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树形选择排序和堆排序。
2. 简单的选择排序
2.1 简单的选择排序分析
简单的选择排序可以描述为:在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换,以此类推,第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,完成整个排序的过程。
下面是选择排序过程的示例:
一趟选择排序的操作为:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之。容易看出,简单选择排序过程中,所需进行记录移动的操作次数较少。然而,无论记录初始排列如何,所需进行的关键字间的比较次数相同,均为n(n -1)/2。因此,总时间复杂度也是O(n^2)。
2.2 简单的选择排序实现
/**********************************************************************************Copyright(C),Your Company*FileName: main.cpp*Author: Huangjh*Version:*Date: 2017-12-17*Description: 简单选择排序的实现*Others:**********************************************************************************/#include <stdio.h>void SelectSort(int *pBuffer, int iSize){for (int i = 0; i < iSize - 1; i++){int iMinKey = i;for (int j = i; j < iSize - 1; j++){if (pBuffer[j] > pBuffer[j + 1])iMinKey = j + 1;}if (iMinKey != 0){int iTemp;iTemp = pBuffer[i];pBuffer[i] = pBuffer[iMinKey];pBuffer[iMinKey] = iTemp;}}}int main(void){int szBuffer[] = { 49, 38, 65, 97, 76, 13, 27, 49 };SelectSort(szBuffer, 8);printf("简单选择排序后的输出:\r\n");for (int i = 0; i < 8; i++){printf("%d ", szBuffer[i]);}printf("\r\n");return 0;}运行输出如下:
简单选择排序后的输出:13 27 38 49 49 65 76 97
3. 树形选择排序
后续补充
4. 堆排序
后续补充
阅读全文
0 0
- 排序算法—选择排序
- 排序算法之选择排序——简单选择排序
- 数据结构&算法实践—【排序|选择排序】选择排序
- 排序算法1—插入排序、选择排序、冒泡排序
- 排序算法之——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——简单选择排序
- 排序算法总结——选择排序
- 内部排序算法——选择排序
- 排序算法2——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 排序算法——选择排序
- 经典排序算法——选择排序
- js数组方法总结
- 盒子模型
- 《数学之美》XI笔记——如何确定网页和查询的相关性
- ssh文件上传
- lambda表达式
- 排序算法——选择排序
- 什么时候用created,什么时候用mounted
- layer用法
- 两个关于Windows 简短内核函数的还原
- Java ==和equals的qubie
- 【转】oracle里IW和WW 区别
- 汇编语言代码段和数据段
- 快速了解JQuery
- Python中的异常处理