d**e 发帖数: 6098 | 1 小于pivot的放左右,大于pivot的放右边,等于pivot的放中间
谁有比较简洁的code?
我写了很久还是非常烦琐。
谢谢。
另外看见另外一道类似的算法,应该是同一个问题:一个数组,把数字放左边,小写字
母放中间,大写字母放右边。 |
d**e 发帖数: 6098 | 2 好像找到了。
http://www.sorting-algorithms.com/quick-sort-3-way
【在 d**e 的大作中提到】 : 小于pivot的放左右,大于pivot的放右边,等于pivot的放中间 : 谁有比较简洁的code? : 我写了很久还是非常烦琐。 : 谢谢。 : 另外看见另外一道类似的算法,应该是同一个问题:一个数组,把数字放左边,小写字 : 母放中间,大写字母放右边。
|
r***u 发帖数: 241 | 3 Dutch national flag problem
【在 d**e 的大作中提到】 : 小于pivot的放左右,大于pivot的放右边,等于pivot的放中间 : 谁有比较简洁的code? : 我写了很久还是非常烦琐。 : 谢谢。 : 另外看见另外一道类似的算法,应该是同一个问题:一个数组,把数字放左边,小写字 : 母放中间,大写字母放右边。
|
d**e 发帖数: 6098 | 4 谢谢。真的很简洁。
void three_way_partition(int array[], int i, int j)
{
int k = i;
int pivot = array[j];
while(i < j)
{
if(array[i] == pivot)
i++;
else if(array[i] < pivot)
{
swap(array[i], array[k]);
k++;
i++;
}
else
{
swap(array[i], array[j]);
j--;
}
}
}
【在 r***u 的大作中提到】 : Dutch national flag problem
|