java 选择排序稳定_[Java]排序算法>选择排序>【简单选择排序】(O(n*n)/不稳定/)

1 选择排序

1.1 算法思想

每一趟从待排序的记录中选出关键字最小的记录,按顺序放在已排序的记录序列的最后(or最前面),直到全部排完位置。

1.2 算法特征

属于【选择排序】

适用于【稳定性】:不稳定(亦可稳定,与“交换记录”的策略相关)

适用于【存储结构】:顺序存储结构 or 链式存储结构 (二者均可)

【时间复杂度】:O(n*n) (最好/平均/最坏)

【空间复杂度】:O(1) (最好/平均/最坏)

(补充:)移动次数较少

相关口诀:(选)希堆快不稳定,选(基)归堆时衡定

1.3 算法实现

import java.util.Arrays;

public class SelectSort {

/**

* 选择排序

* @param array

* @return

*/

public static int [] selectSort(int[] array){

int left = 0, right = array.length-1;

int [] resultArray = Arrays.copyOfRange(array, 0, array.length);

for(int i=left;i

int minIdx = i;

for(int j=i+1;j<=right;j++){//每趟选择出最小值元素的下标

if(resultArray[minIdx]>resultArray[j]){//存在更小的元素时

minIdx = j;

}

}

int tmp = resultArray[minIdx];

resultArray[minIdx] = resultArray[i];

resultArray[i] = tmp;

}

return resultArray;

}

}

1.4 算法测试

import java.util.Scanner;

public class Main {

public static void print(int[] array){

if(array==null || array.length<1){

return;

}

for(int i=0;i

System.out.print(array[i]+" ");

}

System.out.println(array[array.length-1]);

}

public static void main(String[] args) {

//1 输入 一组 乱序的数值 数组

Scanner scanner = new Scanner(System.in);

String input = scanner.nextLine();

String [] strValues = input.trim().split(" ");

int [] array = new int[strValues.length];

for(int i=0,len=strValues.length;i

array[i] = Integer.valueOf(strValues[i]).intValue();//假定所有输入均为合规的整型数值

}

// print(array);// test - 输出 所输入的数据

//2 排序

int [] sortedArray = SelectSort.selectSort(array);

//3 输出

print(sortedArray);

}

}

1.5 参考文献

《数据结构(C语言-第2版-严蔚敏 吴伟民 著)》:Page246

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值