選擇排序定義:每一趟從待排序的數據元素中選出最小(或最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的數據元素排完。 選擇排序是不穩定的排序方法。
class Program { static void Main(string[] args) { int[] array = new[] { 234, 632, 23, 643, 2, 6, -2, 423, 2342,43 }; Console.WriteLine("排序前:"); Console.WriteLine(string.Join(",", array)); SelectSort(array); Console.WriteLine("排序後:"); Console.WriteLine(string.Join(",", array)); Console.ReadKey(); } /// <summary> /// 選擇排序 /// </summary> /// <param name="sources">目標數組</param> private static void SelectSort(int[] sources) { for (int i = 0, len = sources.Length - 1; i <= len; i++) { // 假設最小值索引 int minIndex = i; // 循環遍歷一遍找到最小值的索引 for (int j = i + 1; j <= len; j++) { // 如果最小值比其他元素大,重新設置最小值的索引 if (sources[minIndex] > sources[j]) { minIndex = j; } } // 臨時變量交換最小值的位置; int temp = sources[i]; sources[i] = sources[minIndex]; sources[minIndex] = temp; } } }
void bubble(int a[],int n){ int i,k,temp; for(k=0;k<n-1;k++) { for(i=k+1;i<n;i++) { if(a[k]>a[i]) { temp=a[i]; a[i]=a[k]; a[k]=temp; } } } for(i=0;i<n;i++) printf("%d ",a[i]); printf("\n");}
每一次都選擇當前序列的最值:
例 1,3,6,9,5 從小到大排序!
第一步 1
第二步 1,3
第三步 1,3,5
第四步 1,3,5,6
第五步 1,3,5,6,9
//遞增選擇排序的實現!
void SelectSort(double *head, int amount)
{
double temp;
int m,n;
for (m=0; m<amount-1; m++)
{
for (n=m+1; n<amount; n++)
{
if (head[n]<head[m])
{
temp=head[n];
head[n]=head[m];
head[m]=temp;
}
}
}
}