배열 순 서 를 조정 하여 홀수 가 짝수 앞 에 있 도록 합 니 다.

1739 단어
4. 567913. 방법 2: 우 리 는 두 개의 아래 표 색인 을 유지 할 수 있 습 니 다. 첫 번 째 색인 은 배열 을 가리 키 는 첫 번 째 숫자의 아래 표 로 초기 화 할 수 있 습 니 다.뒤로 만 이동 합 니 다.두 번 째 색인 은 배열 의 마지막 숫자 를 가리 키 는 아래 표 시 를 초기 화 합 니 다.그것 은 앞으로 만 이동한다.두 색인 이 만 나 기 전에 첫 번 째 색인 은 항상 두 번 째 색인 앞 에 있 습 니 다.첫 번 째 색인 이 가리 키 는 숫자 가 짝수 이 고 두 번 째 지침 이 가리 키 는 숫자 가 홀수 라면 우 리 는 두 개의 숫자 를 교환 하고 있다
      :        ,                  ,               ,             。
       :       ,      ,              ,              ,            。         ,          ,        。              。      o(n)。    :
#include<iostream>
using namespace std;

void reorderOddEven(int arr[], int len)
{
	int j = -1;
	for(int i = 0; i < len; ++i)
	{
		if(arr[i] & 1)//       
		{
			swap(arr[i],arr[j + 1]);
			j++;
		}
	}
}

int main(void)
{
	int arr[] = {3, 4, 5, 6, 1, 2};
	reorderOddEven(arr,6);
	system("pause");
	return 0;
}
방법 3: 방법 1 과 방법 2 의 확장 성 이 높 지 않다. 만약 에 우리 가 배열 의 수 를 양수 와 음수 에 따라 나 누 라 고 요구 하거나 우 리 는 3 의 배수 와 3 이 아 닌 배수 에 따라 나 누 라 고 요구한다.우 리 는 또 두 기능 의 차이 가 많 지 않 은 함 수 를 정의 해 야 한다.이때 우 리 는 하나의 기준 만 정의 하면 된다.이렇게 해서 우 리 는 전체 함 수 를 두 부분 으로 분해 하 는데, 하 나 는 숫자 가 배열 의 앞부분 에 있어 야 하 는 지, 아니면 후반 부분 에 있어 야 하 는 지 를 판단 하 는 것 이다.둘 째 는 분할 배열 작업 이다.우 리 는 함수 지침 을 사용 하여 한다
void reorderOddEven(int arr[],int len)
{
	int index1 = 0;//     
	int index2 = len - 1;//     
	while(index1 < index2)//                  
	{
		if(arr[index1] & 1)//           ,      
		{
			index1++;
		}
		else if((arr[index2] & 1) == 0)//             ,      
		{
			index2--;
		}
		else//         ,         ,      
		{
			swap(arr[index1],arr[index2]);
			index1++;
			index2--;
			
		}
	}
}

좋은 웹페이지 즐겨찾기