排序算法笔记(C++版)

排序算法笔记(C++版)

记录最近学习的排序算法

1.冒泡排序

时间复杂度:O(n)[最好],O(n2)[平均],O(n2)[最差]
空间复杂度:O(1)
代码:

#include<iostream>
#include<windows.h>//计时用
using namespace std;

//冒泡排序算法
void bubbleSort(int data[], int n)
{
	//打印原始数据信息
	cout << "\n 待排序数据为:";
	for (int i = 0; i < n; i++) 
		cout << data[i] << " ";
	//算法计时
	LARGE_INTEGER  nFreq, t1, t2;
	double dt;
	QueryPerformanceFrequency(&nFreq);
	QueryPerformanceCounter(&t1);

	//排序算法
	int count = 0;
	for (int i = 0; i < n - 1; i++)
	{
		bool flag = true;//排序提前完成标志
		for (int j = 0; j < n - i - 1; j++)
		{
			if (data[j] > data[j + 1])//改成'<'则为降序
			{
				swap(data[j], data[j + 1]);
				count++;
				flag = false;
			}
		}
		if (flag) break;
	}

	//打印结果信息
	QueryPerformanceCounter(&t2);
	dt = (t2.QuadPart - t1.QuadPart) / (double)nFreq.QuadPart;
	cout << "\n 此次排序耗时: " << dt * 1000000 << "us";

	cout << "\n 执行了"<<count<<"次swap交换";
	cout << "\n 排序结果为:";
	for (int i = 0; i < n; i++)
		cout << data[i] << " ";
	cout << endl;
}

//主函数
int main(void)
{
	int testdata1[10] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
	bubbleSort(testdata1, 10);

	int testdata2[10] = { 0, 1, 2, 3, 4, 9, 8, 7, 6, 5 };
	bubbleSort(testdata2, 10);

	return 0;
}

运行结果:

 待排序数据为:1 3 5 7 9 2 4 6 8 0
 此次排序耗时: 2us
 执行了19次swap交换
 排序结果为:0 1 2 3 4 5 6 7 8 9

 待排序数据为:0 1 2 3 4 9 8 7 6 5
 此次排序耗时: 1.1us
 执行了10次swap交换
 排序结果为:0 1 2 3 4 5 6 7 8 9
请按任意键继续. . .

猜你喜欢

转载自blog.csdn.net/hbsyaaa/article/details/89765323
今日推荐