排序算法之选择排序
来源:互联网 发布:去年淘宝双11销售额 编辑:程序博客网 时间:2024/04/29 03:51
定义:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。(摘自百度百科)
原理:
假设给定数组int arr = {数据有n个}。第一趟从arr[0]~arr[n-1]中选取最小值与arr[0]交换;第二趟从arr[1]~arr[n-1]中选取最小值与arr[1]交换;第三趟从arr[2]~arr[n-1]中选取最小值与arr[2]交换;......第i趟从arr[i-1]~arr[n-1]中选取最小值与arr[i-1]交换;第n-1趟从arr[n-2]~arr[n-1]中选取最小值与arr[n-2]交换。总共通过n-1次,得到一个按照从小到大的有序序列。
图解:
代码实现:
static void selectSort(int[] arr) { int temp = 0; for (int i = 0; i < arr.length - 1; i++) { int minIndex = i; // 假设最小值的下标索引为 i for (int j = i + 1; j < arr.length; j++) { if (arr[minIndex] > arr[j]) { // 证明arr[minIndex]并不是最小值 minIndex = j; } } //在内层循环中,找到最小的数后,再进行交换 if (minIndex != i) { temp = arr[i]; arr[i] = arr[minIndex]; arr[minIndex] = temp; } }}
测试:
public static void main(String[] args) { int[] arr = { 4,2,-1,8,1}; selectSort(arr); System.out.println(Arrays.toString(arr));}
结果:
[-1, 1, 2, 4, 8]
算法分析:
选择排序的复杂度分析。第一次内循环比较N-1次,第二次比较N-1次,然后N-3次,N-4次,……..,最后一次是1次。一共比较:(N - 1) + (N - 2) + ... + 1
,等差数列求和得:N(N-1)/2
次。
由此我们发现不管是怎样的一组数列,比较的次数永远都是N(N-1)/2
次,而交换的次数与数列的初始循序就有关了,数列为正序时:交换次数为0。
所以,简单选择排序的时间复杂度为:O(N^2)。
——————————————————————————————————————————————–如果有什么不对的地方,望批评指出。
阅读全文
0 0
- 排序算法之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 【排序算法】之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 算法-排序之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 排序算法之选择排序
- 禁用cookie后session是如何设置的
- OpenDDS开发手册---第二章(开始)5
- 用栈实现队列
- PostgreSQL 创建和删除角色
- 被微软收购后,领英发布最权威的全球VR人才报告
- 排序算法之选择排序
- Android_ExpandableListView_仿QQ好友列表
- Spring事务Transaction配置的五种注入方式详解
- 自定义PointerProgressBar--圆环进度条
- Windows内核模式和用户模式
- ARM开机自动获取ip及网络启动总结
- IC设计基础系列之CDC篇1:clock domain crossing(CDC) (一 CDC的基本概念)
- 一张图搞定-RxJava2的线程切换原理和内存泄露问题
- UESTC 1606 难喝的饮料 0-1背包+完全背包