双指针法(有待补充)
双指针法主要用于线性表中使用,双指针法又可以细分为快慢指针,头尾指针…
题目1:奇偶数分区
快慢指针法
public static void odd_Even(int num[]) {
int i = -1;
int j = 0;
for(;j<num.length;j++) {
if(num[j]%2==0) {
i++;
swap(num,i,j);
}
}
}
头尾指针法
public static void odd_Even2(int num[]) {
int i = 0;
int j = num.length-1;
while(i<j) {
if(num[i]%2==0)
i++;
else {
swap(num,i,j--);
}
}
}
题目二:除于3的分区
根据一个数除于3剩下的余数,对这个数进行分区。余0的放左边区域,余1的放中部区域,余2的放右边区域。
头尾与快慢混合型指针
//头尾与快慢混合型指针
public static void div_three(int num[]) {
int i = -1;
int k = 0;
int j = num.length-1;
for(;k<=j;k++) { //这里注意需要的是k<=j!
if(num[k]%3==0) {
i++;
swap(num,i,k);
}else if(num[k]%3==2) {
swap(num,k,j--);
k--;
}
}
}