1.简单选择排序(Simple Selection Sort)
在要排序的一组数中,选择最小的记录与第一个位置的记录交换;然后在剩下的数中,选择最小的记录与第二个位置的记录交换...以此类推,直到第n-1个数与第n个数比较为止。
- 选择排序示例:
第一排为初始表,前面斜体加粗记录为有序表,紧接着加粗记录为待被交换记录,有序表后斜体加黑记录为符合条件的待交换记录。
外层循环 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
i = 1 | 23 | 15 | 30 | 1 | 27 | 16 | 54 | 56 | 28 | 10 |
i = 2 | 1 | 15 | 30 | 23 | 27 | 16 | 54 | 56 | 28 | 10 |
i = 3 | 1 | 10 | 30 | 23 | 27 | 16 | 54 | 56 | 28 | 15 |
i = 4 | 1 | 10 | 15 | 23 | 27 | 16 | 54 | 56 | 28 | 30 |
i = 5 | 1 | 10 | 15 | 16 | 27 | 23 | 54 | 56 | 28 | 30 |
i = 6 | 1 | 10 | 15 | 16 | 23 | 27 | 54 | 56 | 28 | 30 |
i = 7 | 1 | 10 | 15 | 16 | 23 | 27 | 54 | 56 | 28 | 30 |
i = 8 | 1 | 10 | 15 | 16 | 23 | 27 | 28 | 56 | 54 | 30 |
i = 9 | 1 | 10 | 15 | 16 | 23 | 27 | 28 | 30 | 54 | 56 |
i = 10 | 1 | 10 | 15 | 16 | 23 | 27 | 28 | 30 | 54 | 56 |
- 选择排序代码示例:
private static void simpleSelectSort(int a[], int n)
{
for (int i = 0; i < n; i++)
{
int min = i;
for (int j = i+1; j < n; j++)
{
if (a[j] < a[min])
{
min = j;
}
}
if (min != i)
{
int tmp = a[i];
a[i] = a[min];
a[min] = tmp;
}
}
}