排序算法

【冒泡排序】

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

过程图:https://blog.csdn.net/lu_1079776757/article/details/80459370

以下写法都对:

    int i, j, temp;
    for (i = 0; i< len ; j++)
    {
        for (j = i+1; i < len; i++)
        if (a[i] > a[j])
        {
            temp = a[i];
            a[i] = a[j];
            a[j] = temp;
        }
    }
    int i, j, temp;
    for (i = 0; i < len ; j++)
    {
        for (j = len-2; i >=j; j--)
        if (a[j] > a[j + 1])
        {
            temp = a[j];
            a[j] = a[j + 1];
            a[j + 1] = temp;
        }
    }
    int i, j, temp;
    for (i = 0; i < len;i++)
    {
        for (j = 1; j < len - i; j++)
        if (a[j-1] > a[j])
        {
            temp = a[j];
            a[j] = a[j-1];
            a[j-1] = temp;
        }
    }
    int i, j, temp;
    for (i = len-1; i < 0; i--)
    {
        for (j = 0; j < i; j++)
        if (a[j] > a[j + 1])
        {
            temp = a[j];
            a[j] = a[j + 1];
            a[j + 1] = temp;
        }
    }

大学老师批作业的时候该多发愁啊。

【选择排序】

#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(int argc, char* argv[])
{
    int a[]={4,3,5,2,6,1};
    int temp,min;
    int len=sizeof(a)/sizeof(int);
    //printf("len=%d
",len);
    int i,j,k;
    for(i=0;i<len-1;i++){
        min=i;
        for(j=i+1;j<len;j++){
            if(a[j]<a[min]){
                min=j;
            }
        }
        if(min!=i){
            temp=a[min];
            a[min]=a[i];
            a[i]=temp;
            /*
            for(k=0;k<len;k++){
                printf("%d ",a[k]);
            }
            printf("
");
            */
        }
    }
    return 0;
}

if(min!=i)放在里面也对,不过交换次数超级多。

#include<stdlib.h>
#include<string.h>
#include<math.h>

int main(int argc, char* argv[])
{
    int a[]={6,5,4,3,2,1};
    int temp,min;
    int len=sizeof(a)/sizeof(int);
    //printf("len=%d
",len);
    int i,j,k;
    for(i=0;i<len-1;i++){
        min=i;
        for(j=i+1;j<len;j++){
            if(a[j]<a[min]){
                min=j;
            }
            if(min!=i){
                temp=a[min];
                a[min]=a[i];
                a[i]=temp;
            }
            /*
            for(k=0;k<len;k++){
                printf("%d ",a[k]);
            }
            printf("
");
            */
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/shuicaojing/p/13903866.html