选择排序的思路比较简单,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

选择排序虽然实现起来比较简单,但是效率也比较低, 为O(n2)。

C语言的代码实现如下 :

 1 //选择排序的C语言实现
 2 void selection_sort(int a[])
 3 {
 4     int i , j;
 5     int min = 0;
 6     for(i=0; i<MAXSIZE-1; i++)
 7     {
 8         for(j=i; j<MAXSIZE; j++)
 9         {
10             if(a[j] <= a[min]) {
11                 min = j;
12             }
13         }
14         swap(a, i, min);
15     }
16 }

一个简单的测试用例:

#include<stdio.h>

#define MAXSIZE 10

void selection_sort(int a[]);
void swap(int a[], int i, int j);

//选择排序的C语言实现
void selection_sort(int a[])
{
    int i , j;
    int min = 0;
    for(i=0; i<MAXSIZE-1; i++)
    {
        for(j=i; j<MAXSIZE; j++)
        {
            if(a[j] <= a[min]) {
                min = j;
            }
        }
        swap(a, i, min);
    }
}

void swap(int a[], int i, int j)
{
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}

int main()
{
    int a[MAXSIZE];
    int i;
    printf("Please input the num:\n");
    for(i=0; i<MAXSIZE; i++)
    {
        scanf("%d",&a[i]);
    }
    printf("before the sort:\n");
    for(i=0; i<MAXSIZE; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
    
    selection_sort(a);

    printf("after the sort:\n");
    for(i=0; i<MAXSIZE; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
}
View Code

 

posted on 2015-04-01 18:12  beyond_Acm  阅读(149)  评论(0编辑  收藏  举报