정렬 - 이진 삽입 정렬

첫째, 알고리즘은 생각

정렬 된 목록에 이진 검색을 형성하고, 위치에 삽입되어, 원래의 위치에있는 요소는 후방 앞으로 시프트.


둘째, 알고리즘 과정

분류 된리스트의 적색 부분이 형성되고, 흑색 부분이 정렬되는 요소는
여기에 그림 삽입 설명


셋째, 달성하기 위해

void insertSort(int R[],int n)	//待排关键字存储在R[]中,个数为n
{
	int i,j;
	int temp;
	int mid;
	int low;
	int high;
	for(i=1;i<n;i++)	//	由于第一个元素不需要比较,故从第二个元素开始执行插入
	{
		mid;
		low=0;
		high=i-1;	// 0到i-1是已经排序好的部分
		temp=R[i];	// 用于存储待排序的关键字
		while(low<=high)
		{
			mid=(low+high)/2;
			if(temp<R[mid])
				high=mid-1;	//	插入点在低半区
			else
				low=mid+1;	//	插入点在高半区
		}
		for(j=i-1;j>=high+1;j--)	//high+1相当于mid,i-1是已排序序列的最高点,记录后移
		{
			R[j+1]=R[j];
		}
		R[high+1]=temp;	//	插入
	}
}

넷째, 알고리즘의 성능 분석

(1) 시간 복잡도 분석

어떤 경우, 외부 루프는 항상 외부 사이클 n은 하나씩 실행한다.

내부 루프는 두 개의 부분으로 나누어 : 이진주기 원소는 원 운동하고, 비교 요소이다.

이진 삽입 정렬 키 초기 서열 비교에 관계없이 번호 (로우> 높은 끝 전체) 고정 이진수 이진 로그 (N)의 수. 따라서, 우리는 요소를 이동하는 시간 복잡도를 논의해야합니다.

  • 이동 요소의 전체 시퀀스는 역순으로되어 있고, 즉 최악의 경우를 고려, 내부 루프는, 총 사이클 수 (N)는 (N + N 로그) 따라서 이와 사이클의 수는, 내부 로그 N + N이다 흐르기 알고리즘 필요 복잡도가 O 인 (N ^ 2)

  • 전체 시퀀스는, 상기 이동 소자가 내부 루프에서 수행 될 필요 시퀀스이기 때문에, 사이클 수는 내부 로그 N + 0이므로 총 사이클 수 N (N 로그), 알고리즘의 복잡성 즉, 최상의 경우를 고려 O (nlog 않음) 인

  • 평균적인 경우, 알고리즘의 복잡도는 O (N ^ 2)

복잡도 (2) 공간 분석 부

알고리즘은 컬럼의 크기의 변화를 정렬 할 변하지 않는 보조 저장 공간을 필요로하는 정수이므로, 공간 복잡도는 O (1)

(3)의 안정성

두 개의 키 값 레코드 A와 B가 동일한 경우, 제 삽입 삽입 B는 A를 B의 순서는 동일하게 유지되므로이 공지 정렬 알고리즘은 안정적이며,이 시간 정렬.

추천

출처blog.csdn.net/starter_____/article/details/93888456