排序 (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);
  }
 }
}

猜你喜欢

转载自blog.csdn.net/qq_42146775/article/details/85056043