【校招VIP】[JAVA]数据结构之选择排序

2天前 收藏 0 评论 0 java开发

【校招VIP】[JAVA]数据结构之选择排序

转载声明:文章来源

目录

算法知识点
算法题目描述
做题思路
模板代码
运行结果
做题过程中遇到的bug及解决方案
修改后代码如下
运行结果
思维导图

算法知识点

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

算法题目描述

提示:简单描述算法知识点相关题目题意

给定一组无序的数据,如果要把它们从小到大重新排序,我们要如何实现这个排序功能呢?

做题思路

提示:可简单描述解题思路,解题步骤,找好切入点,详细讲解这道题所需要使用的算法和考点

1.通过双层for循环调换位置排序
2.for循环 输出每一次排序的结果

模板代码

提示:可贴上解题代码,在较难的地方可以加上自己的注释

import java.util.Scanner;

public class SelectionSort {

public static void sort(int arr[]) {
for (int i = 0; i < arr.length-1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[i]) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
print(arr);
}
}

private static void print(int arr[]) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int arr[] = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
SelectionSort.sort(arr);
}

}

运行结果

做题过程中遇到的bug及解决方案

提示:可针对解题过程中已经遇到的或者易出现的BUG做简单讲述,并给出相应解决方法

此代码虽然最后将数据排序好,但并未采用选择排序算法中,将未排序首位与后面最小位交换,而是依次交换位置,再发现bug后,需添加一个后面最好指引变量minindex即可。

修改后代码如下

package sort;

import java.util.Scanner;

public class SelectionSort {

public static void sort(int arr[]) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i; // 用来记录最小值的索引位置,默认值为i
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j; // 遍历 i+1~length 的值,找到其中最小值的位置
}
}
// 交换当前索引 i 和最小值索引 minIndex 两处的值
if (i != minIndex) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
// 执行完一次循环,当前索引 i 处的值为最小值,直到循环结束即可完成排序
print(arr);
}
}

private static void print(int arr[]) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int arr[] = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = in.nextInt();
}
SelectionSort.sort(arr);
}

}

运行结果

思维导图

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

C 0条回复 评论

帖子还没人回复快来抢沙发