Fork me on GitHub

选择排序

选择排序

算法描述:

选择排序的思想非常的朴实,看名字就能容易地理解它——根据从小到大(或从大到小)的排序需求,每一次从待排序的数据元素中选择最小(或最大)的一个元素,移动过到序列的起始位置,然后在剩余的待排序元素中进行排序。

输入格式:

每次运行时,仅输入10 个由空格分隔的整数Number i (1 <= Number i <= 1000),(其中1 <= i <= 10)。

输出格式:

输出为一行,包括排序后的10个输入整数,每两个整数之间有一个空格,最后一个整数后面没有空格。

样例输入1:

 1 2 3 4 5 6 7 8 9 10 

样例输出1:

 10 9 8 7 6 5 4 3 2 1 

样例输入2:

 2 3 1 9 5 4 4 3 3 2 

样例输出2:

 9 5 4 4 3 3 3 2 2 1 

 

代码:

#include <stdio.h>

void swap(int *a, int *b)
{
    int tmp;
    if(*a < *b)
    {
        tmp = *a;
        *a = *b;
        *b = tmp;
    }
}


int main() {
    int n = 10;
    int max;
    int numbers[10];
    int i;
    int j;
    int index;

    // 读入给定的数字
    for (i = 0; i < n; i++) {
        scanf("%d", &numbers[i]);
    }
    
    // 冒泡排序
    /*
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
            swap(&numbers[j], &numbers[j+1]);
        }
    }
    */
    
    
    // 选择排序
    for(i=0;i<n-1;i++)
    {
        index = i + 1;
        max = numbers[index];
        for(j=i+1;j<n-1;j++)
        {
            if(max < numbers[j+1])
            {
                max = numbers[j+1];
                index = j+1;
            }
        }
        
        swap(&numbers[i], &numbers[index]);
    }


    // 输出
    for(i=0;i<n;i++)
    {
        printf("%d", numbers[i]);
        
        if(i+1 == n || printf(" "));
    }
    
    return 0;
}

 

posted @ 2020-10-12 21:01  小黑子杜  阅读(177)  评论(0编辑  收藏  举报