题解 | #排序#

排序

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;
}
全部评论

相关推荐

明天不下雨了:兄弟你是我今天看到的最好看的简历(我说的是简历风格跟简历书写)把985 211再搞亮一点。投boss就说;您好,我华科(985)研二在读,本科211。对您的岗位很感兴趣,希望能获得一次投递机会。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务