avatar
比较两个QuickSort函数# JobHunting - 待字闺中
K*k
1
都是取第一个元素为支点, 哪个写得更好?
void quickSort1(int arr[], int left, int right)
{
if (left >= right)
return;
int pivot = arr[left];
int i = left;
int j = right + 1;
while (i < j)
{
do { i++; } while (i <= right && arr[i] < pivot);
do { j--; } while (arr[j] > pivot);
if (i < j)
swap(arr, i, j);
}
swap(arr, left, j);
quickSort1(arr, left, j - 1);
quickSort1(arr, j + 1, right);
}
=======================================================================
void quickSort2(int arr[], int left, int right)
{
if (left >= right)
return;
int pivot = arr[left];
int i = left - 1;
int j = right + 1;
while (i < j)
{
do { j--; } while (arr[j] > pivot);
do { i++; } while (arr[i] < pivot);
if (i < j)
swap(arr, i, j);
}
quickSort2(arr, left, j);
quickSort2(arr, j + 1, right);
}
avatar
f*t
2
怎么那么多循环?我的版本只有一层啊:
void quicksort(int arr[], int left, int right)
{
if(left >= right)
return;

int pivot = arr[right];
int i = left;
for(int j = left; j < right; j++)
{
if(arr[j] < pivot)
{
if(i != j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
++i;
}
}
if(i != right) {
int temp = arr[right];
arr[right] = arr[i];
arr[i] = temp;
}

quicksort(arr, left, i-1);
quicksort(arr, i+1, right);
}
avatar
K*k
3
T. Hoare vs N. Lomuto

【在 f*******t 的大作中提到】
: 怎么那么多循环?我的版本只有一层啊:
: void quicksort(int arr[], int left, int right)
: {
: if(left >= right)
: return;
:
: int pivot = arr[right];
: int i = left;
: for(int j = left; j < right; j++)
: {

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。