數組0,1和數組0,1,2排序

數組有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];
	}
 
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章