排序——簡單選擇排序

1、選擇排序概念算法

選擇排序(Selection Sort)的基本思想:對n個記錄進行掃描,選擇最小的記錄,將其輸出,接着在剩下的n-1個記錄中掃描,選擇最小的記錄將其輸出……不斷重複這個過程,直到只剩一個記錄爲止,便可完成數據從小到大的排序過程。
提示:若是要求數據按從大到小排序,則每次掃描時選擇最大的記錄便可。
選擇排序經常使用的算法有:簡單選擇排序和堆排序,本文介紹簡單選擇排序法,
簡單選擇排序法相似人的排序習慣:從數據中選擇最小(或最大)的一個數據,而後將該數與第1個數交換,接下來從剩下數據中選擇最小(或最大)的一個數,第2個數進行交換……這樣重複下去,直到只剩下一個數據爲止。
下面以一組待排序的數據演示簡單選擇排序的過程,假設有8個須要排序的數據序列以下所示:
69,65,90,37,92,6,28,54
使用簡單選擇排序法進行排序的過程以下圖所示。數組


首先對數組中的原始數據進行掃描,找到最小的一個數6,與第1個元素69進行交換,完成第一遍選擇排序的結果,而後不斷重複這個過程,到第7遍掃描後,完成整個數據序列的排序。
注意:在簡單選擇排序法中,某一遍掃描沒有數據交換並不能說明數據就已經按順序排好了,還必須進行後續的掃描。測試

2、簡單選擇排序法的實現code

(1)實現排序

void SelectSort(int a[], int n)
{
	int i, j, t, k;

	for (i=0; i<n; i++) {
		k = i; //記錄和第k個元素交換位置

		for (j=i+1; j<n; j++) {//查找最小數據,保存其序號在k中
			if (a[j] < a[k])
				k = j;
		}
		t = a[i]; //交換最小數據到數組前面
		a[i] = a[k];
		a[k] = t;
	}
}

(2)測試io

void ShowData(int arr[], int n)
{
    int i;
    for (i=0; i<n; i++)
        printf("%d ", arr[i]);
    printf("\n");

    return;
}

#define ARRAYLEN 10

int main(int argc, char *argv[])
{
    int i;
    int a[ARRAYLEN] = {94, 84, 54, 80, 62, 83, 37, 24, 67, 29};

    printf("原數據:");
    ShowData(a, ARRAYLEN);

    SelectSort(a, ARRAYLEN);
    printf("排序後:");
    ShowData(a, ARRAYLEN);
    return 0;

}

(3)運行結果class

相關文章
相關標籤/搜索