改进版得选择法对数组进行排序

对一串数组,先从第一个数字到最后一个数字进行比较选择最大的数字放到第一位,再从第二个数字到最后一个数数字进行比较选择最大的放到第二个数字上,以此类推对数组排序

代码如下:

#include <stdio.h>
int main()
{
    int a[20],n;
    int i,j;
    int index,tmp;
    printf("请输入数组元素个数:");
    scanf("%d",&n);
    printf("请输入数组元素:");
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    //排序
    for (i=0;i<n-1;i++)
    {
        index = i;
        //找出第i大的数所在的位置
        for(j=i+1;j<n;j++)
        {
            if(a[j] > a[index])
                index = j;
        }

        //将第i大的数放在第i个位置
        if (i != index)
        {
            tmp = a[i];
            a[i] = a[index];
            a[index] = tmp;
        }
    }

    //显示数组
    for (i=0;i<n;i++)
    {
        printf("%d ",a[i]);
    }
    return 0;
}


# include <stdio.h>
int main(void)
{
    int i, j;  //循环变量
    int MinIndex;  //保存最小的值的下标
    int buf;  //互换数据时的临时变量
    int a[] = {5, 5, 3, 7, 4, 2, 5, 4, 9, 1, 8, 6};
    int n = sizeof(a) / sizeof(a[0]);  //存放数组a中元素的个数
    for (i=0; i<n-1; ++i)  //n个数比较n-1轮
    {
        MinIndex = i;
        for (j=i+1; j<n; ++j)  //每轮比较n-1-i次, 找本轮最小数的下标
        {
            if (a[MinIndex] > a[j])
            {
                MinIndex = j;  //保存小的数的下标
            }
        }
        if (MinIndex != i)  /*找到最小数之后如果它的下标不是i则说明它不在最左边, 则互换位置*/
        {
            buf = a[MinIndex];
            a[MinIndex] = a[i];
            a[i] = buf;
        }
    }
    printf("最终排序结果为:\n");
    for (i=0; i<12; ++i)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
    return 0;
}