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

交换排序

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

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

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页