0
点赞
收藏
分享

微信扫一扫

JavaEE——spring MVC请求处理

ixiaoyang8 2024-04-26 阅读 12
排序算法

荷兰国旗问题1

给定一个数组和一个数num,把<=num的数放在数组左边,>num的数放在数组右边

void calc(int *arr, int n, int num)
{
int l = -1;
int temp;
for(int i=0;i<n;i++)
{
if(arr[i] <= num)
{
temp = arr[l+1];
arr[l+1] = arr[i];
arr[i] = temp;
l++;
}
}
}

荷兰国旗问题2

给定一个数组和一个数,<num的数放在左边,=num的数放在中间,>num的数放在右边

void calc(int *arr, int n, int num)
{
int l = -1;
int r = n + 1;
int temp;
int idx = 0;
while(idx < r)
{
if(arr[idx] < num)
{
temp = arr[l+1];
arr[l+1] = arr[idx];
arr[idx] = temp;
l++;
idx++;
}
else if(arr[idx] > num)
{
temp = arr[r-1];
arr[r-1] = arr[idx];
arr[idx] = temp;
r--;
}
else
{
idx++;
}
}
}

快速排序

时间复杂度:O(N*logN)
空间复杂度:O(logN)
稳定性:不稳定

方法的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。 

void swap(int *arr, int x, int y)
{
int temp;
temp = *(arr + x);
*(arr + x) = *(arr + y);
*(arr + y) = temp;

}
int* temp(int *arr, int l, int r)
{
int cmp = arr[r];
int idx = l;
int *result = (int *)malloc(sizeof(int)*2);
memset(result, 0, sizeof(int)*2);
while(idx <= r)
{
if(arr[idx] < cmp)
{
swap(arr, l++, idx++)
}
else if(arr[idx] > cmp)
{
swap(arr, r--, idx);
}
else
{
idx++;
}
}
*(result + 1) = idx--;
while(arr[idx] == cmp)
{
idx--;
}
*result = idx;
return result;
}

void qsrot(int *arr, int l, int r)
{
int *res = NULL;
if(l >= r)
{
return;
}

res = temp(arr, l, r);
qsrot(arr, l, *res);
qsrot(arr, *(res+1), r);

free(res);
}
举报

相关推荐

0 条评论