排序 (2) -----簡單選擇排序和氣泡排序
阿新 • • 發佈:2018-12-20
簡單選擇排序和氣泡排序
兩種方法都是每一趟找出最大(小)的他放在一個位置,下一趟不用去管這個位置,只是兩種方法採用的找的形式不一樣
1. 簡單選擇排序:固定位置與前(後)面的比較
例子:5 1 6 2 假如按從小到大排序
5:粗體標記表示 固定的位置
5
:這種標記表示已經排好
5:這種標記表示需要和固定位置比較的
趟 | 需要排的 | 排序完後 |
---|---|---|
第一趟: | 5 7 4 2 | 5 7 4 2 |
5 7 4 2 | 4 7 5 2 | |
4 7 5 2 | 2 7 5 4 | |
第二趟: | 2 7 5 4 |
2 5 7 4 |
2 5 7 4 |
2 4 7 5 | |
第三趟: | 2 4 7 5 |
2 4 5 7 |
最後 | 2 4 5 7 |
7自動排好 |
void SimpleSelectSort(Rectype *R, int n)
{
int i, j;
for (i = 0; i < n; i++)
{
for (j = i + 1; j < n; j++)
{
if (R[j].Key > R[i].Key)
{
Swap(R, i, j);
}
}
}
}
2. 氣泡排序:相鄰位置比較
例子:5 1 6 2 假如按從小到大排序
5
:這種標記表示已經排好
5 7:這種標記表示相鄰位置比較
趟 | 需要排的 | 排序完後 |
---|---|---|
第一趟: | 5 7 4 2 | 5 7 2 4 |
5 7 2 |
5 2 7 4 | |
5 2 7 4 | 2 5 7 4 | |
第二趟: | 2 5 7 4 |
2 5 4 7 |
2 5 4 7 |
2 4 5 7 | |
第三趟: | 2 4 5 7 |
2 4 5 7 |
最後 | 2 4 5 7 |
7自動排好 |
void BubbleSort(Rectype *R, int n)
{
int i, j;
for (i = n; i > 0; i--)
{
for (j = 0; j < i; j++)
{
if (R[j].Key < R[j + 1].Key)
Swap(R, j, j + 1);
}
}
}