數組有0和1,將0排在1之前
思路:
採用兩個指針,一個從前一個從後。
p0找到不爲0的值,p1找不到不爲1的值,二者進行交換。
void sort2(int* arr,int len)
{
int p0=0;
int p1=len-1;
while(p0<=p1)
{
if(arr[p0]==0)
p0++;
if(arr[p1]==1)
p1--;
swap(arr[p0],arr[p1]);
p0++;
p1--;
}
}
數組有0,1和2,將0排在1之前,1排在2之前
時間複雜度O(n)
思路:
通過三個下標遍歷一遍實現的方法。
p0從左側開始,指向第一個非0的數字;p2從右側開始,指向第一個非2的數字。
p1從p0開始遍歷,如果是1,p1繼續遍歷,直到p1遇到0或者2
如果遇到0,則和p0進行交換,然後p0向右,指向第一個非0的數字
如果遇到2,則和p2進行交換,然後p2向左,指向第一個非2的數字
#include<iostream>
using namespace std;
void sort(int* arr,int len)
{
int p0=0;
int p2=len-1;
int p1;
//找到第一個非0的位置
while(arr[p0]==0&&p0<len)
p0++;
while(arr[p2]==2&&p2>=0)
p2--;
p1=p0;
while(p1<=p2)
{
if(arr[p1]==1)
p1++;
else if(arr[p1]==0)
{
swap(arr[p0],arr[p1]);
while(arr[p0]==0&&p0<len)
p0++;
}
else
{
swap(arr[p2],arr[p1]);
while(arr[p2]==2&&p2>=0)
p2--;
}
}
}
int main()
{
int arr[11]={1,2,0,1,1,1,0,2,0,1,2};
sort(arr,11);
for(int i=0;i<11;i++)
{
cout<<arr[i];
}
}