直接选择排序算法思想:
在冒泡排序上做了优化,减少了交换次数,在首轮选择最大的数放在第一项,一轮之后第一项是有序的了,第二轮从第二项开始选择最大的数放在第二项,以此类推,直到整个数组完全有序。
public void select_sort()
{
// 对应位置的数组下标
int max;
// 定义临时变量
int temp;
for (int i = 0; i < array.length - 1; i++)
{
max = i;//假设数组下标为0项是最大的,数组下标为1项是第二大的
/** 查找第 i大的数,直到记下第 i大数的位置 ***/
for (int j = i; j < array.length; j++)
{
// 如果当前位置不是最大的,记录比它大的数组下标
if (array[max] < array[j])
{
max = j;// 记下较大数位置,再次比较,直到最大
}
}
/**** 如果第 i大数的位置不在 i,则交换, 也就是排在第一个不是最大的就交换,第二大的不在第二大 的位置上交换 ****/
if (i != max)
{
temp = array[i];
array[i] = array[max];
array[max] = temp;
}
}
}
具体实例说明:
第一次循环:
外层循环:i=0;
内层循环:array[max](array[0])<array[1],此时max=1;
array[max]和array[2]比,array[max]和array[3]比,array[max]和array[4]比,array[max]和array[5]比,array[max]和array[6]比,
相比过后array[max](array[1])此时是最大的,内层循环结束;
0!=1所以,array[0]和array[max](array[1])交换,此时数组的顺序{ 63, 23, 19, 8, 36, 48, 42 }.
依次类推,数组的顺序是从大到小排序。
/***********************************************************************/