基本思路 在每一次的排序中選出最小(或最大)的數,將其放在數組最前端,然後在後面的數中重覆此步驟,最終達到排序的目的. 演算法描述 將存於數組首位數與後面的數依次比較,將其中的較小的數放到數組放到數組首位 將除存於第二位的數視作首位,重覆第一步的操作 以此類推 代碼實現 這裡以從小到大排序為例 演算法分 ...
基本思路
在每一次的排序中選出最小(或最大)的數,將其放在數組最前端,然後在後面的數中重覆此步驟,最終達到排序的目的.
演算法描述
將存於數組首位數與後面的數依次比較,將其中的較小的數放到數組放到數組首位
將除存於第二位的數視作首位,重覆第一步的操作
以此類推
代碼實現
這裡以從小到大排序為例
# 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[i])
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"後面