排序--选择排序
时间:2019-10-20
本文章向大家介绍排序--选择排序,主要包括排序--选择排序使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1、什么是选择排序?
选择排序是从未排序的队列中找到最小的元素,把这个最小的元素放在首部,接着继续从剩下的未排序的队列中找最小元素,放在原来排序元素的后面
2、代码原理
- 选择排序一共有数组大小-1轮排序
- 每1轮排序,内部又是一个循环,循环的规则:
- 先假定当前未排序元素中第一个是最小数
- 然后和后面的每个数进行比较,如果发现有比当前数更小的数,就重新确定最小数,并得到下标
- 当遍历到数组的最后时,就得到本轮最小数和下标
- 交换代码中再继续回到1进行新一轮排序
3、代码逐步实现:
//需要排序的数组 int[] arr={101,34,119,1};
由上面原理可知,该数组需要进行 3 (arr.length-1)轮排序
//第一轮 int minIndex=0; //假设最小数是数组第一个元素的下标 int min=arr[minIndex]; //最小数的值 for (int i=0+1;i<arr.length;i++){ //从最小数后面开始进行循环比较 if (min>arr[i]){ //当遇到比设置的最小值还小的数时 minIndex=i; //将最小值下标移动到找到的新的最小值 min=arr[i]; //将当前这个最小值记录下来 } } if (minIndex!=0){ //等于0说明后面没找到比预置的最小值更小的,所以不用交换位置 arr[minIndex]=arr[0]; arr[0]=min; } System.out.println("第一轮:"+Arrays.toString(arr));
//第二轮 minIndex=1;//假设最小值下标为剩余未排序的第一个元素的下标 min=arr[minIndex]; for (int i=1+1;i<arr.length;i++){ if (min>arr[i]){ minIndex=i; min=arr[i]; } } if (minIndex!=1){ arr[minIndex]=arr[1]; arr[1]=min; } System.out.println("第二轮:"+Arrays.toString(arr));
//第三轮 minIndex=2;//假设最小值下标为剩余未排序的第一个元素的下标 min=arr[minIndex]; for (int i=1+1;i<arr.length;i++){ if (min>arr[i]){ minIndex=i; min=arr[i]; } } if (minIndex!=2){ arr[minIndex]=arr[2]; arr[2]=min; } System.out.println("第三轮:"+Arrays.toString(arr));
上面已经排序完成了,对比上面三轮的代码,有很多相似之处,接下来合并起来
for (int j=0;j<arr.length-1;j++){ int minIndex=j; int min=arr[minIndex]; for (int i=1+j;i<arr.length;i++){ if (min>arr[i]){ minIndex=i; min=arr[i]; } } if (minIndex!=j){ arr[minIndex]=arr[j]; arr[j]=min; } } System.out.println("排序完成后:"+Arrays.toString(arr));
4、时间复杂度
因为排序用到了两个for循环,所以时间复杂度时O(n^2),但是相比冒泡排序,每轮排序是找到最小的然后移动到首部,操作数少于冒泡排序的操作数,执行时间也比冒泡排序快些
原文地址:https://www.cnblogs.com/han200113/p/11708045.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Ubuntu19.10 下部署邮件系统
- GitLab 初次搭建使用教程
- Vue中鼠标事件
- gitlab添加ssh-keys之后克隆依然需要输入密码
- VM虚拟机系统自定义分区
- k8s问题记录
- Hexo博客Next主题浏览统计不显示
- 视频上云网关平台EasyCVR使用海康SDK拉流协议分析
- 计算机网络物理层习题
- 从数据库中查询马上过生日的人并统计各年龄段及性别所占的人数
- Ubuntu19.10 中安装 JDK
- 在 Ubuntu19.10 上安装 wine 并安装 QQ 等软件
- wordpress迁移至hugo及其自动化发布文章全记录
- 视频流媒体平台EasyNVR硬件设备使用华科云arm版如何修改为固定IP?
- 详解 IP 地址