排序-冒泡排序

冒泡排序

●第一步
从左到右,两两比较,将最大的数放在数组的最后一位(即下标n-1的位置)

●第二步
采用相同的方法,再次遍历,将第二大的数,放在数组倒数第二的位置(即n-2的位置),以此类推,直至数组有序。

冒泡排序的时间复杂度分析:N个数排序
把最大的放到最后N-1…N-2…2…1…等差数列
(1+N)N/2 ===> aN"2 +bN + c
保留高阶项,忽略低阶项,不要前面的系数

●优化:
当数组在整个遍历过程中,没有发生交换,说明待排序数组已经是有序的了,此时可以直接结束排序过程。

//冒泡排序
void bubbleSort(std::vector<int>& nums) {
	int n = nums.size();
	for (int j = n; j > 0; j--) {
		bool flag = true;
		for (int i = 0; i < j - 1; i++) {
			//需要交换,代表是无序的
			if (nums[i] > nums[i + 1]) {
				flag = false;
				std::swap(nums[i], nums[i + 1]);
			}
		}
		if (flag == true) {
			return;
		}
	}
}

你可能感兴趣的:(C/C++,算法,数据结构)