[알고리즘 서론] 최대 치 와 최소 치 를 동시에 찾 습 니 다.

1616 단어 알고리즘list
n 개의 요소 가 있 는 집합 에서 몇 번 의 비교 가 있어 야 가장 작고 최대 요 소 를 확정 할 수 있 습 니까?하나씩 비교 하면 n - 1 번 비교 해 야 하 는데 더 좋 은 방법 이 있 지 않 을까요?
비교 에서 만난 최대 치 와 최소 치 를 기록 합 니 다.입력 한 요 소 를 두 가지 로 비교 한 다음 현재 의 최대 치, 최소 치 와 비교 합 니 다.이렇게 하면 두 개의 원 소 를 원래 의 네 번 이 아니 라 세 번 비교 해 야 한다.
구현 코드 는 다음 과 같 습 니 다:
void MiniNum()
{
	const int size = 100000;
	int * array_list = new int [sizeof(int)*size];
	int max = 66666;/*        */
	int min = -90;/*        */
	int tmp_max = 0;/*      */
	int tmp_min = 0;/*      */
	srand(0);
	for(int i=0;i<size;i++)
	{/*         */
		int ran_num=rand()% size;
		if(i == size/2)
		{
			array_list[i] = min;
		}
		else if(i == size/3)
		{
			array_list[i] = max;
		}
		else
		{
			array_list[i] = ran_num;
		}
	}
	/*            */
	if(size % 2 == 0)
	{
		if(array_list[0] > array_list[1])
		{
			tmp_max = array_list[0];
			tmp_min = array_list[1];
		}
		else
		{
			tmp_max = array_list[1];
			tmp_min = array_list[0];
		}
	}
	else
	{
		tmp_max = array_list[0];
		tmp_min = array_list[0];
	}
	for(int i=0;i<size -1;i+=2)
	{/*        */
		int min_tmp ;
		int max_tmp;
		if(array_list[i] >= array_list[i+1])
		{
			min_tmp = array_list[i+1];
			max_tmp= array_list[i];
		}
		else
		{
			min_tmp = array_list[i];
			max_tmp= array_list[i+1];
		}
		if(max_tmp > tmp_max)
		{
			tmp_max = max_tmp;
		}
		if(min_tmp < tmp_min)
		{
			tmp_min = min_tmp;
		}
		
	}
	std::cout<<tmp_max<<std::endl;
	std::cout<<tmp_min<<std::endl;
	/*for(int i=0;i<size;i++)
	{
		std::cout<<array_list[i]<<"\t";
	}*/
	delete array_list;
}

좋은 웹페이지 즐겨찾기