题解 | #排序#

排序

http://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896


void swap(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void my_qsort(int* q, int left, int right)      // 使左边的数字都小于等于 x , 右边的数字都大于等于 x
{
    if (left >= right) return;

    //int x = q[left], i = left, j = right;           // while 的时候用
    int x = q[left], i = left - 1, j = right + 1;     // do while 的时候用
    while (i < j)
    {
        //while (i < j && q[i] < x)     // 
        //{
        //    i++;
        //}
        //while (i < j && q[j] > x)
        //{
        //    j--;
        //}
        
        
        do
        {
           i++;                              // 先加加,因为前面初始化 i 的时候 i = left - 1; 来到了 i = left 的位置进行判断;
        } while (q[i] < x);
        do
        {
           j--;                              // 先减减,因为前面初始化 j 的时候 j = right + 1; 来到了 j = right 的位置进行判断;
        } while (q[j] > x);

        if (i < j)
        {
            int temp = q[i];
            q[i] = q[j];
            q[j] = temp;
            //swap(q[i], q[j]);
        }
    }

    my_qsort(q, left, j);      // 如果用的是my_qsort(q, left, i - 1);
    my_qsort(q, j + 1, right); // my_qsort(q, i, right); 也可以不过前面的x = q[right + left + 1] / 2;
}

int* MySort(int* arr, int arrLen, int* returnSize ) 
{
    my_qsort(arr, 0, arrLen - 1);
    *returnSize = arrLen;
    return arr;
}
全部评论

相关推荐

01-02 00:50
三峡大学 Java
程序员牛肉:这简历一出手就离失业不远了。 作为一家公司来讲,我如果要招日常实习生,那我对实习生最基本的要求就是要能干活,毕竟你就待三四个月,谁会留心培养你? 那么除了院校之外,最重要的就是项目和实习了。没有实习的话项目就好好搞。 但是你说你这个项目吧:课程作业管理系统和TMS运输管理系统。这两个基本就和闹着玩差不多。 你作为一个想要应聘Java开发实习生的人,对后端的理解还仅仅停留在:“使用mapper和sql映射”,“使用SQL进行多表调用”,“基于MySQL简历表结构”,“基于Spring boot完成CURD操作”这种玩具上......... 找不到后端实习的
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务