冒泡法排序(C++)

void BundleSort(int src[],int num)
{
 int temp;

 for(int i=0; i<num; i++)
 {
  for(int j=0; j<num-i-1; j++)
  {
   if(src[j] > src[j+1])
   {
    temp = src[j];
    src[j] = src[j+1];
    src[j+1] = temp;
   }
  }
 }

 for(int k=0; k<num; k++)
 {
  cout<<src[k]<<" ";
 }
 cout<<endl;
}

冒泡排序是一种简单直观的排序算法,它通过重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来[^4]。该算法的名字来源于较小的元素会通过交换逐渐“浮”到数列的顶端,而较大的元素则会“沉”到底部。 冒泡排序的基本思想是:从第一个元素开始,依次比较相邻的两个元素,如果前一个元素大于后一个元素,则交换它们的位置。这样,每一轮遍历可以将当前未排序部分的最大元素移动到正确的位置。这一过程会重复进行,直到整个数组排序完成[^2]。 以下是冒泡排序的一个标准实现,使用C++语言编写: ```cpp #include <iostream> using namespace std; void bubbleSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { // 每次遍历不需要检查最后一个元素,因为它已经被正确放置 for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { // 交换相邻元素的位置 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr) / sizeof(arr[0]); bubbleSort(arr, n); cout << "排序后的数组:" << endl; for (int i = 0; i < n; i++) { cout << arr[i] << " "; } cout << endl; return 0; } ``` 在上面的实现中,外层循环控制遍历的次数,内层循环负责比较和交换相邻元素。为了提高效率,还可以对冒泡排序进行优化。例如,可以添加一个标志变量来检测某一轮遍历中是否发生了交换。如果没有发生任何交换,说明数组已经有序,可以提前结束排序过程。 以下是一个带有优化的冒泡排序实现: ```cpp #include <iostream> using namespace std; void optimizedBubbleSort(int data[], int len) { for (int i = len - 1; i >= 0; i--) { int flag = 0; // 用于判断是否执行了数据交换 for (int j = 0; j < i; j++) { if (data[j + 1] < data[j]) { int tmp = data[j]; data[j] = data[j + 1]; data[j + 1] = tmp; flag++; // 如果发生了交换,flag会增加 } } if (flag == 0) break; // 如果没有发生交换,说明已经排序完成 // 打印中间排序结果(可选) cout << "过程数据:\t"; for (int k = 0; k < len; k++) { cout << data[k] << " "; } cout << endl; } cout << "最终数据:\t"; for (int k = 0; k < len; k++) { cout << data[k] << " "; } cout << endl; } int main() { int data[8] = {12, 4, 8, 34, 66, 15, 65, 43}; // 原始数据 int len = sizeof(data) / sizeof(data[0]); cout << "优化冒泡排序法" << endl; cout << "原始数据:\t"; for (int i = 0; i < len; i++) { cout << data[i] << " "; } cout << endl; optimizedBubbleSort(data, len); return 0; } ``` 冒泡排序的时间复杂度为 $O(n^2)$,空间复杂度为 $O(1)$。尽管它不是最高效的排序算法,但由于其简单易懂的实现方式,冒泡排序常用于教学和小规模数据的排序[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值