Java 带重复项的快速排序错误
我的快速排序算法有点问题。它在没有重复值的数组上非常有效。但一旦我有了一个2+重复的数组,它就会陷入一个无休止的循环中。例如,如果我的数组是:Java 带重复项的快速排序错误,java,quicksort,Java,Quicksort,我的快速排序算法有点问题。它在没有重复值的数组上非常有效。但一旦我有了一个2+重复的数组,它就会陷入一个无休止的循环中。例如,如果我的数组是: int[] array = {44, 53, 36, 186, 22, 162, 22}; public void quick_sort(int[] data, int low, int high) { // 1 or 0 items are sorted by default if(high - low < 1)
int[] array = {44, 53, 36, 186, 22, 162, 22};
public void quick_sort(int[] data, int low, int high)
{ // 1 or 0 items are sorted by default
if(high - low < 1)
return;
int left = low;
int right = high;
int pivot = data[low + (high - low) / 2];
while(left < right)
{ // Increment left pointer until left >= pivot
while(data[left] < pivot)
left++;
// Increment right pointer until right <= pivot
while(data[right] > pivot)
right--;
// If left <= right; swap values
if(left <= right)
{ int temp = data[right];
data[right] = data[left];
data[left] = temp;
}
}
// quick_sort 'lesser values'
quick_sort(data, low, left - 1);
// quick_sort 'greater values'
quick_sort(data, left + 1, high);
}
int[]数组={44,53,36,186,22,162,22};
公共无效快速排序(int[]数据、int低、int高)
默认情况下,{//1或0项被排序
如果(高-低<1)
返回;
int左=低;
int右=高;
int pivot=数据[低+(高-低)/2];
while(左<右)
{//递增左指针直到左>=轴
while(数据[左] //如果左考虑当data[left]==data[right]==pivot
时会发生什么,那么使用重复项,您可以得到(left
,但是data[left]==pivot==data[right]
在这种情况下,循环不会向左递增或向右递减,它只是一次又一次地交换元素…(同样有趣的是,即使在left==right
时也会“交换”)
public void quick_sort(int[] data, int low, int high)
{ // 1 or 0 items are sorted by default
if(high - low < 1)
return;
int left = low;
int right = high;
int pivot = data[low + (high - low) / 2];
while(left <= right)
{ // Increment left pointer until left >= pivot
while(data[left] < pivot)
left++;
// Increment right pointer until right <= pivot
while(data[right] > pivot)
right--;
// If left < right; swap values
if(left <= right)
{ int temp = data[left];
data[left] = data[right];
data[right] = temp;
left++;
right--;
}
}
// quick_sort 'lesser values'
quick_sort(data, low, right);
// quick_sort 'greater values'
quick_sort(data, left, high);
}