交换排序,冒泡排序,选择排序

交换排序

for(int i=0;i<length-1;i++) 
{ 
    for(int j=i+1;j<length;j++) 
    { 
        if(arr[i]>arr[j])
        {
            int temp=arr[i]; 
            arr[i]=arr[j]; 
            arr[j]=temp;
        }
    }
}

第一个数,先和第二个到最后一个都比一遍,将最小的放在最前端。
第二个数,和第三个到最后一个都比一边,将最小的放在最前面。


冒泡排序

for(int i=0;i<length-1;i++) 
{ 
    for(int j=0;j<length-i-1;j++) 
    { 
        if(arr[j]>arr[j+1]) 
        { 
            int temp=arr[j]; 
            arr[j]=arr[j+1]; 
            arr[j+1]=temp; 
        } 
    } 
}

第一遍:
第一个和第二个比,将大的放在后面。第二个和第三个比,将大的放在后面。。。
第二遍:
同上,但相对循环次数减少一次。

//优化:
bool flag = true; 
for(int i=0;i<length-1 && flag;i++) 
{ 
    swap = false;
    for(int j = 0;j <len -1-i;j++)//比较的下标
    {
        if(arr[j] > arr[j+1])
        {
            tmp = arr[j+1];
            arr[j+1] = arr[j];
            arr[j] = tmp;
            swap =true;
        }
    }
    if(swap == false)//没有交换
    {
        break;
    }
}

选择排序

int min = 0; 
for (int i=0; i<length-1; i++) 
{
    min = i; //定义当前下标为最小值 
    for (int j=i+1;j<length;j++) 
    { 
        if (arr[min] > arr[j]) //如果存在更小的值 
        { 
            min = j; //调整 min 下标 
        } 
    } 
    if (i != min) //若 i 不为最小值,交换 
    { 
        int tmp = arr[min]; 
        arr[min] = arr[i]; 
        arr[i] = tmp;
    } 
}

先假设第一个为最小值,记录下标。第一个和之后的比,找到最小值的下标,记录。判断两个下下标是否相等,如果不相等交换。

  • 20
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值