/**
* 选择排序
* 步骤:
* 1、用i标识将数组分为排好序和未排序两部分
* 2、遍历未排序部分,将最小值和未排序的第一个替换位置,然后i+1,后面继续循环遍历
* 时间复杂度:n^2
*/
public class SelectionTest {
public static void main(String[] args) {
int[] arr = {3,1,6,3,8,3,5,9,4,67,2,5,7,2,6,3,5};
selectionSort(arr);
for (int i : arr) {
System.out.print(i+",");
}
}
/**
* 选择排序:遍历找最小值往前面填
*
* @param arr 需要排序的数组
*/
public static void selectionSort(int[] arr) {
if (arr == null || arr.length < 2){
return;
}
for (int i = 0; i < arr.length - 1; i++) {
int minSite = i;
for (int j = i; j<arr.length; j++) {
minSite = arr[j] < arr[minSite] ? j : minSite;
}
swap(arr, i, minSite);
}
}
/**
* 交换最小值的位置
*
* @param arr 数组
* @param i 当前遍历的位置
* @param minSite 最小值的位置
*/
private static void swap(int[] arr, int i, int minSite) {
int a = arr[i];
arr[i] = arr[minSite];
arr[minSite] = a;
}
选择排序
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 基本思想 数组分成有序区和无序区,初始时整个数组都是无序区,然后每次从无序区选一个最小的元素直接放到有序区的最后,...
- 数据结构和算法学习汇总[https://www.jianshu.com/p/72b20d1e06e6] 本文主要讲...
- 简单选择排序(直接选择排序): 基本思路:第一次从A[0..n-1]中选取最小值,与A[0]交换;第二次从A[1....
- 选择排序 对于任何输入,时间为O(n*n); 冒泡排序 最优(对于升序的数组,因为加入了一个跳出判断):O(n),...
- 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序...