첫째, 알고리즘은 생각
정렬 된 목록에 이진 검색을 형성하고, 위치에 삽입되어, 원래의 위치에있는 요소는 후방 앞으로 시프트.
둘째, 알고리즘 과정
분류 된리스트의 적색 부분이 형성되고, 흑색 부분이 정렬되는 요소는
셋째, 달성하기 위해
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의 순서는 동일하게 유지되므로이 공지 정렬 알고리즘은 안정적이며,이 시간 정렬.