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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值