排序算法笔记(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
请按任意键继续. . .