排序算法——冒泡排序

冒泡排序

冒泡排序是一种简答的排序方法,其模拟了较大的数会慢慢“浮”到最开始一端(或慢慢“沉”到结尾的一端)。

其基本原理是:比较相邻的两个数,如果前一个比后一个大,则交换这两个元素。一轮排序过后,就能找出该序列中最大(小)的数,且放在了正确的位置。不断循环,找出第二大的数,第三大的数······,直到整个数组遍历完没有任何一对元素需要交换。

冒泡排序算法的时间复杂度为O(n^2)

伪代码

BUBBLESORT(A)
	for i =1 to A.length-1
		for j = A.length downto i+1
			if A[j] < A[j-1]
				exchange A[j] and A[j-1]

伪代码出自《算法导论》原书第3版,机械工业出版社,Thomas H.Cormen Charles E.Leiserson著
该伪代码与我的实际实现代码略有出入,但结果都是基本相同的。

若存在序列:{7, 50, 1, 4, 32, 7, 9, 5, 25, 6},利用冒泡排序进行排序。
(标记为已排部分,加粗为比较元素)
7 50 1 4 32 7 9 5 25 6 ——7<50
7 50 1 4 32 7 9 5 25 6 ——50>1
7 1 50 4 32 7 9 5 25 6 ——50>4
7 1 4 50 32 7 9 5 25 6 ——50>32
7 1 4 32 50 7 9 5 25 6 ——50>7
7 1 4 32 7 50 9 5 25 6 ——50>9
7 1 4 32 7 9 50 5 25 6 ——50>5
7 1 4 32 7 9 5 50 25 6 ——50>25
7 1 4 32 7 9 5 25 50 6 ——50>6
7 1 4 32 7 9 5 25 6 50 ——即50已经排好
·
·
·

循环上述比较,直至,排序完成。
1 4 5 6 7 7 9 25 32 50

在这里插入图片描述

gif制作来源于VisuAlgo https://visualgo.net/zh/sorting

代码

#include <iostream>

#define N 10
using namespace std; 

void BubbleSort(int a[],int length) {
	for (int i = 0; i < length; i++) {
		for (int j = i + 1; j < length; j++) {
			if (a[i] > a[j])
				swap(a[i], a[j]);
		}
	}
}


int main() {
	int a[N] = { 7, 50, 1, 4, 32, 7, 9, 5, 25, 6 };
	int length = sizeof(a) / sizeof(a[0]);
	
	BubbleSort(a, length);								//冒泡排序

	for (int i = 0; i < N; i++)
		cout << a[i] << " ";
	cout << endl;

	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值