選擇排序的實現

選擇排序很簡單,基本思想如下:

從待排序的記錄序列中選擇關鍵碼最小(或最大)的記錄並將它與序列中的第一個記錄交換位置;然後從不包括第一個位置上的記錄序列中選擇關鍵碼最小(或最大)的記錄並將它與序列中的第二個記錄交換位置;如此重複,直到序列中只剩下一個記錄爲止。

代碼實現如下:

#include <stdio.h>

#define ARRAYSIZE 4

void swap(int *m, int *n)
{
    *m = *m + *n;
    *n = *m - *n;
    *m = *m - *n;
}

void selectsort(int a[], int n)
{
    int i, j, index;
    for(i = 0; i < n-1; i++)
    {   
        index = i;
        for(j = i+1; j < n; j++)
            if(a[index] >= a[j])
                index = j;
        if(i != index)
            swap(&a[index], &a[i]);
    }   
}

void main()
{
    int a[ARRAYSIZE], i;
    printf("please input 4 numbers\n");
    for(i = 0; i < ARRAYSIZE; i++)
        scanf("%d", &a[i]);

    /*insert sort*/
    selectsort(a, ARRAYSIZE);

    for(i = 0; i < ARRAYSIZE; i++)
        printf("%d\n", a[i]);
}
這裏曾經錯過一次,在寫交換函數的時候,如果兩個數相等會出現錯誤,所以在交換前加了一句:

if( ! = index)  

    swap(&a[index], &a[i]);


發佈了39 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章