//给定一个数num 一个数组arr 将小于num的放在数组坐标 大于num的放在数组右边 等于num的放在数组中间
//思路,两个指针 等于的不用管
//荷兰国旗问题
void portition2(int arr[], int len, int num) {
int leftIndex = -1;
int rightIndex = len;
int workIndex = 0;
while (workIndex<rightIndex) {
if (arr[workIndex] < num) {
//将这个值与 leftIndex+1处的值交换位置 leftIndex++ workIndex++
int temp = arr[workIndex];
arr[workIndex] = arr[leftIndex + 1];
arr[leftIndex + 1] = temp;
leftIndex++;
workIndex++;
}
else if (arr[workIndex] > num) {
// 将 此值与 rightIndex-1 处的位置与它交换 rightIndex-- ,workIndex停住 因为交换过来的没有和前边的比是否比num小
int temp = arr[workIndex];
arr[workIndex] = arr[rightIndex - 1];
arr[rightIndex - 1] = temp;
rightIndex--;
//workIndex++;
}
else if (arr[workIndex] == num) {
workIndex++;
}
}
}
荷兰国旗问题求解
最新推荐文章于 2024-05-11 14:30:05 发布