排序算法的时间复杂度比较(quick_sort;bubble_sort)

本文深入探讨了两种经典的排序算法——快速排序和冒泡排序,通过对比它们在不同情况下的时间复杂度,揭示了快速排序在大多数情况下更优的效率。详细分析了快速排序的平均和最坏时间复杂度为O(n log n),而冒泡排序始终为O(n^2)。此外,还讨论了实际应用中如何选择合适的排序算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream> 
#include <fstream> 
#include <algorithm> 
#include <vector> 
#include <ctime> 
#include <stdlib.h>
using namespace std; 
const int MAX = 1000; 
vector<int> orited;//全局原始未排序vector 

void randNum() 
{//产生随机数存于vector 
    ofstream fp("data.txt"); 
    if (fp.fail()) 
    { 
        cout << "open data error " << endl; 
        exit(EXIT_FAILURE); 
    } 
    srand((unsigned)time(NULL)); 
    for (int i=0 ; i<MAX ; i++) 
    { 
        orited.push_back(rand()); //是用vector保存随机数 
        fp << orited[i] << " ";
    } 
    fp.close(); 
} 
/************************************************************************/ 
/* 快速排序 */ 
/************************************************************************/ 
int Partion(vector<int> &v ,int low ,int high) 
{//对vector进行划分,返回枢轴下标 
    int pivotkey; 
    pivotkey = v[low] ; 
    while ( low < high ) 
    {
 while (low < high && v[high] >= pivotkey) 
     high--; 
 v[low] = v[high]; 
 while (low < high && v[low] <= pivotkey) 
     low++; 
 v[high] = v[low]; 
    } 
    v[low] = pivotkey; 
    return low; 
} 
void quickSort(vector<int> &number, int left, int right) 
{//用引用解决传参问题,以下类似 
    if ( left < right ) 
    { 
        int i = Partion(number , left, right) ; 
        quickSort(number, left, i-1); // 对左边进行递归 59. quickSort(number, i+1, right); // 对右边进行递归 
    } 
} 
void quick_sort() 
{//快速排序测试程序 
    double start ,end ; 
    vector<int> v(orited);//直接用全局orited初始化v 
    start = clock() ; 
    quickSort(v,0,MAX-1); 
    end = clock(); 
    cout << "quick sort cost : " << end - start << endl; 
}
/*********************************/
/*冒泡排序*/
/**********************************/
void bubble_sort()
{ 
    int i, j; 
    vector<int> v(orited); 
    double start, end; 

    start = clock(); /*计时函数*/
    for (i = 0; i< MAX; i++) 
    { 
        for (j = i + 1; j< MAX; j++) 
        { 
            if (v[i] > v[j])//最小的往左冒泡 
            { 
                swap(v[i],v[j]); 
            } 
        } 
    } 
    end = clock(); 
    cout << "bubble sort cost : " << end - start << endl; 
}


/*main函数输出时间复杂度*/
void main(){
    randNum();

    quick_sort();
    bubble_sort();
    double t = clock();
    cout << t << endl;

    system("pause");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值