题解 | #排序#
排序
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;
}