c语言实现选择排序和冒泡排序

73 阅读1分钟

c语言实现冒泡排序和选择排序

注意:都以升序为例。

一.冒泡排序

思路:

  1. 从第一个数开始,依次相邻两个数比较,将大的放后面,直到比完一轮,最后一个数一定是最大的数。
  2. 继续从第一个数开始,重复第一步,但是本次不用和最后一个数比较,因为最后一个数已经确定为最大,所以本次比较范围缩减,确定了倒数第二个数一定为第二大数。
  3. 重复第二步,不断将当前范围减小,直至第一个数就是最小的数。

本质:比较n-1轮(n为数组的长度),每一轮确定一个目前范围内最大的数(末位),范围不断缩减。

实现:

#include <stdio.h>
int main()
{
   double arr[10] = {1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
   // 1.比较n-1轮
   for (int i = 1; i <= 9; i++)
   {
      // 2.两两比较 范围不断缩小
      for (int j = 0; j <= 9 - i; j++)
      {
         if (arr[j] > arr[j + 1])
         {
            double temp = arr[j + 1]; //将小的临时保存下来
            arr[j + 1] = arr[j];      //大的放后面
            arr[j] = temp;            //小的放前面
         }
      }
   }
   //打印排序后的数组
   for (int i = 0; i < 10; i++)
   {
      printf("%.2f ", arr[i]);
   }
}

二.选择排序

思路:

  1. 从第一个数开始,依次和后面的每一个数比较,谁小谁放第一个位置,直到比完一轮,第一个数一定是最小的数。
  2. 从第二个数开始,重复第一步,确定第二个位置一定为倒数第二小的数。
  3. 重复第二步,不断缩减范围,直至最后一个数就是最大的数。

本质:比较n-1轮(n为数组的长度),每一轮确定一个目前范围内最小的数(首位),范围不断缩减。

实现:

#include <stdio.h>
int main()
{
   double arr[10] = {1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
   // 1.比较n-1轮
   for (int i = 0; i <= 8; i++)
   {
      // 2.每轮第一个数与后面每位比较,范围不断缩小
      for (int j = i + 1; j <= 8; j++)
      {
         if (arr[i] > arr[j])
         {
            double temp = arr[j]; //将小的临时保存下来
            arr[j] = arr[i];      //大的放后面
            arr[i] = temp;        //小的放前面
         }
      }
   }
   //打印排序后的数组
   for (int i = 0; i < 10; i++)
   {
      printf("%.2f ", arr[i]);
   }
}