static void selectSort1(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[x]>arr[y])
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
以上是视频里选择排序的第一个算法,原理是假定数组第一个元素为全数组最小元素,将第一个元素与数组其它元素依次比较,当某个元素比第一个元素小时,就把这个元素和第一个元素交换位置,这样始终保持第一个元素为最小元素,比较第一趟结束后第一个位置上的元素即确定为数组中的最小元素,接下来假定数组第二个元素为除第一个元素外数组的最小元素,重复和第一个元素一样的比较,第二趟结束后第二个位置上的元素即为数组中第二小的元素,如此重复,最后一个元素无需进行上述比较即可确定位置,所以总共比较arr.length-1趟,每次确定一个最小元素。 你贴出来的是经过适当优化的算法,这个优化体现在:第一个算法假定最小元素和其它元素进行比较的时候,一旦发现有比假定最小元素更小的元素,当即交换两个元素的位置,优化后的算法设置了一个index,这个index相当于一个指针,当发现有比假定最小元素更小元素的时候,只将此元素的下标赋值给index,一趟结束后index里存的是本趟比较最小元素的下标,然后再和假定最小元素交换位置,这样避免了许多无效的数组元素交换,两个数组元素交换位置,借助第三个变量的话需要进行三次赋值操作,将最小元素下标赋值给index只需要一次赋值操作。
|