前言
最近小咸儿一直在和小伙伴们学习数据结构的内容,其中排序就是其中非常重要的一部分,今天特地总结一下选择类排序中的简单选择排序。
叙述
宝图
思想
第一趟,从n个元素中找出关键字最小的元素与第一个元素交换;第二趟,再从第二个元素开始的n-1个元素中再选出关键字最小的元素与第二个元素交换;如此,第k趟,则从第k个元素开始的n-k+1个元素中选出关键字最小的元素与第k个元素交换,直到整个序列按关键字有序。
关注点
简单选择排序,在比较过程中,是将较小值的索引记录下来,到所有关键字元素都比较结束后,将记录下来最小值的所在的索引位置对应的元素值与待交换的元素进行交换位置。
代码实现
package sort;
public class SelectSort {
public static void main(String[] args){
SelectSort sort = new SelectSort();
int[] list = {23,45,67,32,55,12,55,65,3,5};
// 调用简单选择排序
sort.selectSort(list);
}
/**
* 简单选择排序
* @param arr 待排序数组
*/
public void selectSort(int[] arr){
for (int i=0;i<arr.length-1;i++){
int min = i;
// 这里如果使用i+1,则输出结果有问题,使用min+1则没有问题
for (int j = i+1;j<arr.length;j++){
if (arr[j]<arr[min]){
min = j;
}
}
// 选出最小的元素,进行交换
if (min!=i){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
print(arr,arr.length,i);
}
printResult(arr,arr.length);
}
/**
* 打印排序的最终结果
* @param a 数组
* @param n 长度
*/
public void printResult(int[] a,int n){
System.out.println("最终排序结果:");
for (int j=0;j<n;j++){
System.out.println(" "+a[j]);
}
System.out.println();
}
/**
* 打印排序的每次循环结果
* @param a 数组
* @param n 长度
* @param i 索引
*/
public void print(int[] a,int n,int i){
System.out.println("第"+i+"次:");
for (int j=0;j<n;j++){
System.out.println(" "+a[j]);
}
System.out.println();
}
}
总结
可以看出简单选择排序的时间复杂度为O(n^2),所以还有很多需要优化的地方,所以接下来的篇章会继续总结有关简单选择排序的优化排序。
结语
对于选择类排序还有待于加深自己的理解,希望能够和您在评论区中交流。
感谢您的阅读~~