求助c语言问题 关于快速排序和冒泡排序运行时间比较

2025-06-28 22:02:45
推荐回答(1个)
回答1:

因为你快速排序写错了   快速排序应该在零点几秒就能完成排序 反而冒泡对于这种大数据会很慢

附上标准的快速排序

void QuickSwap(int *a, int left, int right)
{
    if(left >= right)/*如果左边的数组大于或者等于就代表已经整理完成一个组了*/
    {
        return ;
    }
    int i = left;
    int j = right;
    int key = a[left];

    while(i < j)                               /*控制在当组内寻找一遍*/
    {
        while(i < j && key <= a[j])
        /*而寻找结束的条件就是,1,找到一个小余或者大于key的数(大小取决于你想升
        序还是降序)2,没有符合的切i与j相遇*/
        {
            j--;/*向前寻找*/
        }

        a[i] = a[j];
        /*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是
        a[0],那么就是给key)*/

        while(i < j && key >= a[i])
        /*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,
        因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/
        {
            i++;
        }

        a[j] = a[i];
    }

    a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/
    QuickSwap(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/
    QuickSwap(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/
                       /*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/
}