选择排序和冒泡排序有一点点像,选择排序是默认前面都是已经排序好的,然后从后面选择最小的放在前面排序好的的后面,首先第一轮循环的时候默认的排序好的为空,然后从后面选择最小的放到数组的第一个位置,第二轮循环的时候默认第一个元素是已经排序好的,然后从剩下的找出最小的放到数组的第二个位置,第三轮循环的时候默认前两个都是已经排序好的,然后再从剩下的选择一个最小的放到数组的第三个位置,以此类推。下面看一下代码。
public static void choice(int a[]) {
for (int i = 0; i < a.length - 1; i++)//前一个数
{
int index = i;//获取前一个数的下标
for (int j = i + 1; j < a.length; j++)//后一个数
{
if (a[index] > a[j])//判断起一个数于后一个数的大小
{
index = j;//记录数小的下标
}
}
if (i != index)//如果前一个数的下标不等于后一个小数的下标,说明啥,说明:(其实不可能一样)加上更严谨
swap(a, i, index);
}
}
public static void swap(int a[],int i,int j)
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
我们看到每轮循环的时候并没有直接交换,而是从他后面的序列中找到最小的记录一下他的index索引,最后再交换
public static void main(String[] args) {
int a[] = new int[]{54, 25, 63, 12, 12, 4, 7, 22,};
choice(a);//调用选择排序
for (int i : a) {
System.out.print(i + " ");
}
}
?运行结果:
?
|