鱼C论坛

 找回密码
 立即注册
查看: 2764|回复: 0

[技术交流] 小甲鱼快速排序代码的不完整性

[复制链接]
发表于 2018-4-8 20:30:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 毛毛虫爬行中 于 2018-4-8 20:35 编辑

这个代码在基数小的排序(小于50个数左右)中看不出任何弊端,超过50之后运行时间会慢慢变大,已经变成慢排了。达到1000以上的时候就崩溃了,程序出错。所以还是需要改进的,对于边界和效率没有控制好,有太多重复。
/**
 * @brief 交换元素
 *
 * @param array
 * @param i
 * @param j
 */
void Swap (int array[], int i, int j)
{
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

/**
 * @brief 快速排序
 *
 * @param array
 * @param size
 */
void QuickSort (int array[], int left, int right)
{
    int i = left;
    int j = right;
    int pivot = array[(left + right) /2];

    while (i <= j)
    {
        while (array[i] < pivot)
        {
            i++;
        }
        while (array[j] > pivot)
        {
            j--;
        }
        if (i <= j)
        {
            Swap (array, i, j);
            i++;
            j--;
        }
        if (i < right)
        {
            QuickSort(array, i, right);
        }
        if (j > left)
        {
            QuickSort(array, left, j);
        }
    }
}

//测试函数
void Sort_test2 ()
{
    int sorted = 0;
    int size = 2048;
    int MAX = 1024;

    int * array = NULL;
    array = (int *)malloc (sizeof (int) * size);
    GenerateDate (array, size, MAX);
    PrintData (array, size);

    QuickSort (array, 0, size-1);
    printf ("\n#########\n");
    sorted = PrintData (array, size);

    if (!array)
        free(array);
    array = NULL;
}

int main()
{
    Sort_test2();
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-29 16:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表