排序(二)之选择排序SelectSort
来源:互联网 发布:二次元音乐软件 编辑:程序博客网 时间:2024/06/10 12:27
一、选择排序的思想
每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
下面,看个例子吧:(这里举例从小到大排序)
初始序列为:9 3 2 5 4 7 6 0 1 8
第一次选择通过两两比较从这10个数中选出最小的与第一位交换
第二次选择也利用上面的方法先选出2-10这9个数中最小的然后与第二位交换
.........按上面的方法依次选择排序
第九次选择后,我们就能得到最终的结果了:0 1 2 3 4 5 6 7 8 9
总结一下上面的例子吧,(当有n个元素时)1.我们要经过n-1次选择才能排好 2.每次选择需要在剩下的序列里进行两两比较,选出最小的。
二、编程
定义一个变量min,用来记录找到的最小值的下标,然后,每趟找完最小值之后,将最小值与相应位置的值作交换就可以了。
下面看一下代码实现吧。(环境:vs2010 语言:c语言)
#include <stdio.h>#include <stdlib.h>void SelectSort(int* arr, int len){int i = 0;int j = 0;for(i = 0; i < len-1; i++) //控制选择的趟数{int tmp; int min = i;for(j = i+1; j < len; j++) //控制每趟选择比较的次数{if(arr[min] > arr[j]){min = j;}}tmp = arr[i];arr[i] = arr[min];arr[min] = tmp;}}int main(){int i = 0;int array[10] = {9, 3, 2, 5, 4, 7, 6, 0, 1, 8};SelectSort(array, sizeof(array)/sizeof(int));for(i = 0; i < sizeof(array)/sizeof(int); i++){printf("%d ",array[i]);}printf("\n");system("pause");return 0;}
三、选择排序与冒泡排序的区别:
1.首先,选择排序是通过两两比较将最小(或最大)值标记出来,然后与前面相应位置进行交换;而冒泡排序是通过两两比较将不符合要求的交换使最大(或最小)值到后面。
2.选择排序优于冒泡排序的在于它交换数据次数少,先不急于调换位置,先从arr[0]开始逐个检查,看哪个数最小就记下该数所在的位置min,等一躺扫描完毕,再把arr[min]和arr[0]对调,这时arr[0]到arr[9]中最小的数据就换到了最前面的位置。
这个是冒泡排序的链接点击打开链接,有兴趣的童鞋可以点进去看一下哦!!
谢谢阅读,祝大家每天都开开心心哒 ^_^
- 排序(二)之选择排序SelectSort
- 选择排序(SelectSort)
- Java--选择排序(SelectSort)
- 选择排序(selectSort.cpp)
- 排序——选择排序(Selectsort)
- 选择排序:selectSort
- selectSort - 选择排序
- SelectSort,选择排序
- 选择排序SelectSort
- 选择排序-selectSort
- 选择排序--SelectSort
- 选择排序-selectsort
- 选择排序:selectSort
- 选择排序(SelectSort)
- SelectSort 选择排序
- 选择排序(Selectsort)之Java实现
- 选择排序(Selectsort)之Java实现
- 排序算法-SelectSort-选择排序
- 数据库视频总结
- StringUtils检查字符串是否空或是null
- C++实现单向链表
- 知识图谱基本知识
- Android软键盘的隐藏与显示
- 排序(二)之选择排序SelectSort
- HDU 2717||POJ 3278 BFS入门(理解原理)
- 实体类中的通用方法可以自动生成
- 当我们finish掉app的Acticity后 进程还在么?
- 解读膳食指南(4)-2016版儿童平衡膳食算盘
- 第三方登录
- 10037---Java NIO系列教程(七) FileChannel
- SpringDataJpa的Specification查询
- 左划商品详情UI处理