1. 程式人生 > >排序 (2) -----簡單選擇排序和氣泡排序

排序 (2) -----簡單選擇排序和氣泡排序

簡單選擇排序和氣泡排序

兩種方法都是每一趟找出最大(小)的他放在一個位置,下一趟不用去管這個位置,只是兩種方法採用的找的形式不一樣

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
4
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);
  }
 }
}