选择排序核心思路(默认从小到大排序):
每一轮中当前位置不变,当前位置元素挨个和后面元素进行比较,如果前者大后者小,交换元素,接着向后比较
直到每个元素都和后面元素比较完成,结束
选择排序的算法流程:
- 创建数组(或链表)并初始化数据,数组长度为 n
- 设定双指针 i 和 j
- 开始外层循环 i ,i 从角标 0 开始,到 n-1 结束
- 开始内层循环 j ,j 从 i+1 开始,到 n 结束
- 在内层循环中,每次 i 角标对应的元素和 j 角标对应的元素进行比较,如果前者大后者小,则交换元素位置,接着向后比较
- 直到 i 遍历完毕,结束
选择排序动图分析:
如图所示创建数组并初始化元素,长度为5,元素5-3-8-4-2
开始第1轮比较:i 从 0 开始,j 从 i+1 开始;结果排成2-5-8-4-3,最小值 2 出来了
开始第2轮比较:i 从 1 开始,j 从 i+1 开始;结束排成2-3-8-5-4,倒数第二小值 3 出来了
依次类推。。。。
代码奉上:
/**
@Author Teacher_HENG
*/
public class SelectSort {
public static void selectSort(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=i;j<arr.length;j++){
if(arr[i]>arr[j]){
swap(arr,i,j);
}
}
}
}
private static void swap(int[] arr, int i, int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}