21xrx.com
2024-11-22 07:44:56 Friday
登录
文章检索 我的文章 写文章
C++冒泡排序代码的修改与讲解
2023-06-22 11:40:10 深夜i     --     --
C++ 冒泡排序 代码修改 讲解 排序算法

C++是一门广泛应用于计算机领域的高级编程语言,其中冒泡排序是一种十分常见的排序算法。但是,C++冒泡排序代码在实际应用中,为了提高效率和减小内存消耗,需要进行相应的修改与优化。在本篇文章中,我们将就C++冒泡排序代码进行修改与讲解。

首先,我们来看看C++冒泡排序的原始代码:


void bubbleSort(int array[], int n){

 for (int i = 0; i < n - 1; ++i){

  for (int j = 0; j < n - i - 1; ++j){

   if (array[j] > array[j + 1]){

    int temp = array[j];

    array[j] = array[j + 1];

    array[j + 1] = temp;

   }

  }

 }

}

以上代码中,我们利用两个for循环来完成数组排序。其中,外层for循环表示循环次数,内层for循环是数组中相邻两个元素之间的比较与交换。在循环中,我们使用if语句比较相邻两个元素的大小,如果前一个元素大于后一个元素,则进行交换,否则不做处理。

但是,在实际应用中,冒泡排序的时间复杂度较高,往往需要进行相应的优化,才能提高效率。其中,以下两种方法可以进行优化:

1. 增加一个标志变量flag,减少不必要的比较和交换


void bubbleSort(int array[], int n){

 bool flag = true;

 for (int i = 0; i < n - 1 && flag; ++i){

  flag = false;

  for (int j = 0; j < n - i - 1; ++j){

   if (array[j] > array[j + 1]){

    int temp = array[j];

    array[j] = array[j + 1];

    array[j + 1] = temp;

    flag = true;

   }

  }

 }

}

以上代码中,我们增加了一个bool类型的标志变量flag,用于判断当前循环中是否发生了数据交换。如果没有发生交换,则说明数组已经排序完毕,可以直接退出循环。这样可以减少不必要的比较和交换操作,提高效率。

2. 优化内层循环,减少循环次数


void bubbleSort(int array[], int n){

 int i = n - 1;

 while (i > 0){

  int pos = 0; //记录最后一次交换的位置

  for (int j = 0; j < i; ++j){

   if (array[j] > array[j + 1]){

    int temp = array[j];

    array[j] = array[j + 1];

    array[j + 1] = temp;

    pos = j;

   }

  }

  i = pos; //i为最后一次交换的位置

 }

}

以上代码中,我们将内层循环限定在了[0, i)的范围内,每次循环找到最后一次交换的位置i,将i之后的元素排好序。这样可以减少循环次数,提高效率。

综上所述,对于C++冒泡排序代码的修改与优化,可以采用增加标志变量和优化内层循环的方法,从而提高排序效率和减小内存消耗。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复