빠 른 배열 에서 partition 함수 최적화

2957 단어
최근 에 알고리즘 을 보고 있 는데 patition 함수 가 비교적 간단 한 쓰기 방법 이 있 음 을 발 견 했 기 때문에 쓴 후에 사용 할 수 있 습 니 다.
/ / arr [] 는 배열 이 고 start, end 는 각각 배열 의 첫 번 째 요소 와 마지막 요소 의 색인 이다.
//     index ,           Arr[index] ,           Arr[index] 
int partition( int Arr[], int start, int end, int pivotIndex )  //pivotIndex     
{
	int pivot = Arr[pivotIndex];
	swap( Arr[pivotIndex], Arr[end]);     //exchange the pivot and the last element

	int indexStore = start;
	for( int i = start; i < end; i++ )    
	{
		if( Arr[i] < pivot )
		{
			swap( Arr[indexStore], Arr[i] );
			indexStore ++;
		}
	}
	swap( Arr[indexStore], Arr[end] );
	return indexStore;
}

이것 은 빠 른 배열 프로그램 으로 스스로 두 드 린 것 으로 매우 간결 하 다.
/*****************************
@data:2015/7/1
@author:lss
@function:fast sort by using partition funtion
******************************/


#include <stdio.h>
#include <iostream>
using namespace std;

void swap( int &a, int &b ){   //    
	int tmp  = a;
	a = b;
	b = tmp;

}
//     index ,           Arr[index] ,           Arr[index] 
int partition( int Arr[], int start, int end, int pivotIndex )  //pivotIndex     
{
	int pivot = Arr[pivotIndex];
	swap( Arr[pivotIndex], Arr[end]);     //exchange the pivot and the last element

	int indexStore = start;
	for( int i = start; i < end; i++ )    
	{
		if( Arr[i] < pivot )
		{
			swap( Arr[indexStore], Arr[i] );
			indexStore ++;
		}
	}
	swap( Arr[indexStore], Arr[end] );
	return indexStore;
}

void fastSort( int Arr[], int start, int end ){   //     
	if( start == end )
		return;

	int index = partition( Arr, start, end, start );   //  index ,            。
	if( index > start ) 
		fastSort(Arr, start, index-1 );  //left sort
	if( index < end )
		fastSort(Arr, index+1, end);   //right sort

}

int main(){
	int Arr[] = {3,2,4,7,4,56,1};
	fastSort( Arr, 0, 6);
	for(int i = 0 ; i <= 6; i++)
		cout<<Arr[i]<<endl;  
	return 0;
}

이것 은 다른 쓰기 입 니 다. 많은 책 에 이렇게 쓰 여 있 을 것 입 니 다.
/******************************
*@data:2015/6/16
*@author:lss
*@function:
test sort_fast
**********************************/



#include <iostream>
#include <algorithm>

#include <stdio.h>
using namespace std;


void swap( int &x, int &y){  //swap funtion
	int tmp = x;
	x = y;
	y = tmp;
}

void fastSort( int Arr[], int start, int end ){  //fast funtion

	int pst = start;
	int ped = end-1;
	if( start == end && Arr == NULL)
		return;

	while( pst != ped ){
		if( Arr[pst] >Arr[end] ){
				swap( Arr[pst], Arr[ped]);
				ped --;
			}
		else
			pst ++;
	}
	swap( Arr[ped], Arr[end] );   //swap

	fastSort( Arr,  pst, ped-1 );   //left sort
	fastSort( Arr,  ped+1, end );   //left sort


}


int main(){   //main funtion
	int 
Arr[]={2,7,4,3,6};
	fastSort( Arr, 0, 4);
	for(int i = 0; i<4; i++)
		cout<<i<<endl;

	return 0;
}




좋은 웹페이지 즐겨찾기