選擇排序--
基本原理:(升序)對數據進行遍歷,找出最小的數與第一個數進行位置交換;接着從第二個數開始進行遍歷,從中再找出最小的數與第二個數進行位置交換;重複該過程,直至只剩下一個數爲止。
算法分析:交換移動數據次數少,每趟的比較次數相同,第i趟的排序的次數爲(n-i)次;
交換次數爲0~n-1(有序~逆序)。最終的排序時間是比較與交換的次數,算法的時間複雜度爲O(n*n)。
實現代碼(C):
#include <stdio.h>
void SelectSort(int *a , int len)
{
int i ,j;
int temp , flag; / /存放最小值及其下標
for(i=0; i<len; i++)
{
temp = a[i];
flag = i;
for(j=i+1; j<len; j++)
{
if(a[j] < temp)
{
temp = a[j]; //找出每次遍歷的最小值 及下標
flag = j;
}
}
//if (flag != i)
{
a[flag] = a[i]; //將最小值與遍歷的開始值 交換位置
a[i] = temp;
}
}
}
int main()
{
int i;
int a[] = {4,7,8,1,5,6,9,0,3,2};
int len = sizeof(a)/sizeof(a[0]); //利用sizeof()求數組的長度
SelectSort(a, len);
for(i=0; i<len; i++)
{
printf("%d ",a[i]);
}
return 0;
}