選擇排序法(C語言)


基本思路

在每一次的排序中選出最小(或最大)的數,將其放在數組最前端,然后在后面的數中重復此步驟,最終達到排序的目的.

算法描述

將存於數組首位數與后面的數依次比較,將其中的較小的數放到數組放到數組首位
將除存於第二位的數視作首位,重復第一步的操作
以此類推

代碼實現

這里以從小到大排序為例

# include<stdio.h>
void swap(int *p, int *q)
{
    int temp;
    temp = *p;
    *p = *q;
    *q = temp;
}
int main()
{
    int i, j, n, t;
    int a[100];
    scanf("%d", &n);//輸入要排序的數組元素個數
    getchar();
    for(i=0;i<n;i++)
    scanf("%d", &a[i]);//遍歷數組
    for(i=0;i<n-1;i++)//從首位開始,注意:最后一個數由於已經被動和前面所有數進行了比較,故不需要再主動比較
    {
        int min=i;
        for(j=i+1;j<n;j++)//依次和后面的數比較找出最小的數
            if(a[j]<a[min])
            min=j;
        if(min != i)//如果最小的數不是首位,則交換
        swap(&a[min],&a[i]);
    }
    for(i=0;i<n;i++)
    printf("%d ", a[i]);
}

算法分析

選擇排序是不穩定的,如:5 8 5 2這個數列,當第一個"5"與"2"和交換后,第一個"5"就到了第二個"5"后面


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM