Java算法---直接选择排序法----O(n*n)
选择排序法
概念:
第一次从R[0]~R[n-1]中选取最小值,与R[0]交换。第二次从R[1]~R[n-1]中选取最小值与R[1]交换。。。以此类推。
通俗点说就是每次找到后面元素的最小值然后与之交换。
选择排序法效率中。
选择排序思路
1:外层循环:要走几趟,同样是length-1。
2:设置一个最小值。假设第一个就是最小值。
3:设置一个最小值下标
4:内层循环:那你当前的最小值去逐一比较。当有比当前最小值小的数时,记录最小值,记录下标。
5:退出内层循环后就交换位置。
package com.test_1;
public class Demo5_3 {
public static void main(String[] args) {
//简单测试数组
int arr [ ] ={1,6,0,-1,9,1000,-1000,98,-687};
//调用选择排序法
Select select = new Select();
select.sort(arr);
}
}
//--------------选择排序法
class Select{
public void sort(int arr[]){
//中间值
int temp = 0;
//外循环:我认为最小的数,从0~长度-1
for(int j = 0; j<arr.length-1;j++){
//最小值:假设第一个数就是最小的
int min = arr[j];
//记录最小数的下标的
int minIndex=j;
//内循环:拿我认为的最小的数和后面的数一个个进行比较
for(int k=j+1;k<arr.length;k++){
//找到最小值
if (min>arr[k]) {
//修改最小
min=arr[k];
minIndex=k;
}
}
//当退出内层循环就找到这次的最小值
//交换位置
temp = arr[j];
arr[j]=arr[minIndex];
arr[minIndex]=temp;
}
//输出结果
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}