[데이터 구조] - 내부 정렬 (교환 정렬)

내부 정렬 - 교환 정렬
  • 앞 에 써 주세요
  • 1. 헤더 파일 및 형식 정의
  • 2. 함수 성명
  • 3. 기본 조작
  • 3.1 거품 정렬
  • 3.1.1 교환
  • 3.1.2 거품 의 주요 과정
  • 3.2 빠 른 정렬
  • 3.2.1 구분
  • 3.2.2 빠 른 배 주 과정
  • 4. main 함수
  • 5. 소결
  • 앞 에 쓰다
    [설명] 다음 코드 는 최종 적 으로 증가 서열, 즉 작은 것 에서 큰 것 으로 정렬 된다.
    1. 헤더 파일 및 형식 정의
    #include<stdio.h>
    #define ElemType int
    

    2. 함수 선언
    /*    */
    void swap(int& a, int& b);							//1-1.  
    void BubbleSort(ElemType A[], int n);				//1-2.    
    int Partition(ElemType A[], int low, int high);		//2-1.  
    void QuickSort(ElemType A[], int low, int high);	//2-2.    
    

    3. 기본 조작
    3.1 거품 정렬
    3.1.1 교환
    //1-1.  
    void swap(int& a, int& b) {	//          ,    
    	int temp = a;
    	a = b;
    	b = temp;
    }
    

    3.1.2 거품 발생 주 과정
    //1-2.    
    void BubbleSort(ElemType A[], int n) {
    	for (int i = 0; i < n - 1; i++) {	//       ,  n-1   
    		bool flag = false;		//               
    		for (int j = n - 1; j > i; j--)		//      
    			if (A[j - 1] > A[j]) {		//    
    				swap(A[j - 1], A[j]);	//  
    				flag = true;	//     ,      
    			}
    		if (flag == false)
    			return;		//          ,       ,      
    	}
    }
    

    3.2 빠 른 정렬
    3.2.1 구분
    //2-1.  
    int Partition(ElemType A[], int low, int high) {	//    
    	ElemType pivot = A[low];	//            
    	while (low < high) {		// low high         
    		while (low < high && A[high] >= pivot)
    			high--;
    		A[low] = A[high];		//            
    		while (low < high && A[low] <= pivot)
    			low++;
    		A[high] = A[low];		//            
    	}
    	A[low] = pivot;				//           
    	return low;					//           
    }	
    

    3.2.2 빠 른 배출 과정
    //2-2.    
    void QuickSort(ElemType A[], int low, int high) {
    	if (low < high) {		//       
    		int pivotpos = Partition(A, low, high);		//  
    		QuickSort(A, low, pivotpos - 1);			//             
    		QuickSort(A, pivotpos + 1, high);
    	}
    }
    

    4. main 함수
    int main() {
    	//1.    
    	ElemType A[] = { 10,9,8,7,6,5,4,3,2,1 };
    	BubbleSort(A, 10);
    	for (int i = 0; i < 10; i++)
    		printf("%d\t", A[i]);
    	printf("
    "
    ); //2. ElemType B[] = { 10,9,8,7,6,5,4,3,2,1 }; QuickSort(B, 0, 9); for (int i = 0; i < 10; i++) printf("%d\t", B[i]); return 0; }

    5. 소결
    1. 교환 정렬 의 개념
  • 주로 두 단계 로 나 뉜 다. ① 비교: 처음부터 끝까지 비교 하고 가장 작은 것 은 팀 의 머리 에 놓는다 (증가 하 는 것 을 예 로 들 면).② 교환
  • 2. 두 가지 교환 정렬 에 대한 성능 분석
  • 거품 정렬 공간 복잡 도: O (1) 시간 복잡 도: O (n2) 안정성: 안정 적 적용 성: 순서 저장 과 체인 저장 에 적용 되 는 선형 표
  • 빠 른 정렬 ① 공간 복잡 도 = O (재 귀 층수) -> 가장 좋 은 상황: O (log2n) -> 최 악의 상황: O (n) -> 평균 상황: O (log2n) ② 시간 복잡 도 = O (n * 재 귀 층수) -> 가장 좋 은 상황: O (nlog2n) -> 최 악의 상황: O (n2) -> 평균 상황: O (nlog2n) 안정성: 불안정 적용: 순서대로 저 장 된 선형 표 [주] 에 만 적용: 빠 른 정렬 은 모든 내부 정렬 알고리즘 에서 평균 성능 이 가장 좋 습 니 다
  • 3. 기타 설명
  • 거품 정렬 이 비교적 간단 하고 빠 른 정렬 에 중심 을 두 고 손 으로 코드 를 쓴다.
  • 교환 정렬 의 중요 한 특징 (1) 거품 정렬 에 있어 거품 이 발생 할 때마다 하나의 요소 가 최종 위치 에 놓 여 있다.(2) 빠 른 정렬 에 있어 ① 한 번 의 구분 을 거치 면 하나의 요소 가 최종 위치 에 놓 인 다 ② 한 번 의 정렬 을 거 쳐 중심 축 이 옆 에 있 으 면 두 번 째 정렬 은 하나의 요소 가 최종 위치 에 놓 인 다.만약 추축 이 가장자리 에 닿 지 않 는 다 면 두 번 째 요 소 는 두 개의 원소 가 그 최종 위 치 를 확정 할 것 이다.상기 특징 은 거품 정렬 이나 빠 른 정렬 여 부 를 판단 하 는 근거 로 할 수 있다
  • .

    좋은 웹페이지 즐겨찾기