用C/C++编程实现直接选择排序

直接选择排序算法思想:

在冒泡排序上做了优化,减少了交换次数,在首轮选择最大的数放在第一项,一轮之后第一项是有序的了,第二轮从第二项开始选择最大的数放在第二项,以此类推,直到整个数组完全有序。

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 }.

依次类推,数组的顺序是从大到小排序。

/***********************************************************************/

猜你喜欢

转载自blog.csdn.net/u014689845/article/details/88256923