选择排序
算法原理说明
- 在未排序的序列中找到最小(最大)元素,放到已排序序列的起始位置
- 再从剩余未排序序列中继续寻找最小(最大)元素,放到已排序序列的起始位置
- 重复第二步,直到所有元素均排序完毕。
java源码实现
package sort;
import java.util.Arrays;
public class Selection {
public static int [] selectSort(int []sourceArray){
int [] arr = Arrays.copyOf(sourceArray,sourceArray.length);
for (int i=0;i<arr.length-1;i++){ //需要比较的轮数 N-1
int min =i; // 给最小数赋初值
for(int j=i+1;j<=arr.length-1;j++){ //每一轮需要比较的次数 N-i
if(arr[i]>arr[j]){
min=j; //记录最小值的下标
}
if(i!=min){ //如果最小值的下标不为初值则交换
int tmp = arr[min];
arr[min]=arr[i];
arr[i]=tmp;
}
}
}
return arr;
}
public static void main(String[] args) {
int sourceArry[]={2,5,4,6,1};
System.out.println("原数组:");
System.out.println(Arrays.toString(sourceArry)); //注意数组输出的3种方法 1,常规for循环 2,增强for循环 3,利用Arrays的toString函数
System.out.println("排序后数组:");
System.out.println(Arrays.toString(selectSort(sourceArry)));
}
}
递归实现
/**
* 递归
* @param arr 数组
* @param base 最小值的初始下标
* @param next 与最小值比较的数的下标
*/
public static void selectSort3(int[] arr,int base,int next) {
int i=base;
int j=next;
int temp; //交换时的中间变量
int minIndex=base;
if(j<=arr.length-1) { //判断是否需要继续排序
temp=arr[base];
while(j<=arr.length-1) { //进行本轮的比较
if(arr[j]<temp) { //找出此轮的最小值,并标记下标
temp=arr[j];
minIndex=j;
}
j++;
}
if(minIndex!=base) { //如果最小值的下标不为初值则交换
arr[minIndex] = arr[base];
arr[base] = temp;
}
i++;
selectSort3(arr,i,++i); //递归进行下一轮排序
}
}
本文详细介绍了选择排序的基本原理,包括未排序序列中找到最小元素并插入已排序部分的过程。提供了Java源码实现以及递归版本的代码示例,展示了如何通过代码操作实现这一经典排序算法。

4338

被折叠的 条评论
为什么被折叠?



