Java常用算法——选择排序
来源:互联网 发布:数据存储加密解决方案 编辑:程序博客网 时间:2024/06/05 17:37
选择排序
时间复杂度:O(n²),假设有n个数据,数据交换的次数最多有n-1次,但程序比较的次数较多
空间复杂度:O(1),只需要一个附加程序单元用于交换
选择排序算法的关键就是n-1趟比较,每趟比较的目的就是选择出本趟比较中最小的数据,并将该数据放在本趟比较的第一位
选择排序每趟比较最多只需交换一次,只要找到本趟比较中最小的数据,然后拿它和本趟比较中第一位的数据交换
每趟比较的目的只是找出本趟比较中最小数据的索引,选择排序的第n趟比较至多交换一次,总是拿n-1位的数据和中间某项数据(本趟比较中最小的数据)进行交换
如果本趟比较第n-1位已经是最小,那就无需交换
代码:
生成随机数组的工具类
package com.algorithm.utils;import java.util.Random;public class ArraysUtil { private static Random rand = new Random(); /** * 返回长度为size,并且数组中元素的大小范围为[begin, end)的int数组 */ public static int[] makeIntArray(int begin, int end, int size) { int[] nums = new int[size]; for(int i = 0; i < size; i++) { nums[i] = begin + rand.nextInt(end - begin); } return nums; }}
选择排序代码:
package com.algorithm.sort;import java.util.Arrays;import com.algorithm.utils.ArraysUtil;public class S02_SelectionSort { private static final int SIZE = 10; public static void selectionSort(int[] nums) { int index; int temp; for(int i = 0; i < nums.length - 1; i++) { index = i; // 永远保留本趟比较中最小值的索引 for(int j = i+1; j < nums.length; j++) { if(nums[j] < nums[index]) { index = j; } } if(index != i) { temp = nums[i]; nums[i] = nums[index]; nums[index] = temp; } System.out.print("第" + (i+1) + "次排序的结果为:"); System.out.println(Arrays.toString(nums)); } } public static void main(String[] args) { int[] nums = ArraysUtil.makeIntArray(10, 100, SIZE); System.out.print("排序前的数组为:"); System.out.println(Arrays.toString(nums)); selectionSort(nums); System.out.print("排序后的数组为:"); System.out.println(Arrays.toString(nums)); }}
结果:(由于数组随机产生,每次结果都不一样)
排序前的数组为:[24, 60, 71, 18, 34, 69, 53, 81, 62, 53]第1次排序的结果为:[18, 60, 71, 24, 34, 69, 53, 81, 62, 53]第2次排序的结果为:[18, 24, 71, 60, 34, 69, 53, 81, 62, 53]第3次排序的结果为:[18, 24, 34, 60, 71, 69, 53, 81, 62, 53]第4次排序的结果为:[18, 24, 34, 53, 71, 69, 60, 81, 62, 53]第5次排序的结果为:[18, 24, 34, 53, 53, 69, 60, 81, 62, 71]第6次排序的结果为:[18, 24, 34, 53, 53, 60, 69, 81, 62, 71]第7次排序的结果为:[18, 24, 34, 53, 53, 60, 62, 81, 69, 71]第8次排序的结果为:[18, 24, 34, 53, 53, 60, 62, 69, 81, 71]第9次排序的结果为:[18, 24, 34, 53, 53, 60, 62, 69, 71, 81]排序后的数组为:[18, 24, 34, 53, 53, 60, 62, 69, 71, 81]
阅读全文
0 0
- Java常用算法——选择排序
- 常用排序算法——选择排序
- 【Java 常用算法】选择排序
- Java算法—选择排序
- Java常用排序算法(二):选择排序
- Java常用排序算法之选择排序
- 常用算法回顾——选择排序
- Java排序算法——选择排序
- Java常用排序算法冒泡排序与选择排序总结
- 常用排序、选择算法
- java算法——选择排序
- 排序算法—选择排序
- 常用排序算法之直接选择排序java版
- JAVA常用排序算法之简单选择排序
- 【常用排序算法】选择排序(Java实现)
- 常用排序算法——冒泡、插入、选择
- 常用的排序算法性能分析(1)—— 选择排序、插入排序、希尔排序
- 【Java常用排序算法】选择排序(简单选择排序、堆排序)
- linux下LAMP环境配置之apache-2.4.27编译安装
- (3)数据挖掘算法之SVM
- 斐波那契数列的递归和非递归实现 —— python
- Python爬虫实战一 | 抓取取校花网的所有妹子
- 引用类型(类)
- Java常用算法——选择排序
- 链式物理结构(元素查找、元素删除、元素插入)
- java 程序文本文档形式的编写,编译,及运行
- 别让时光---消磨你美丽的脸庞
- Linux笔记
- (4)数据挖掘算法之Apriori
- LeetCode——102. Binary Tree Level Order Traversal
- 配合springmvc
- java反射机制调用方法