정렬 코드 를 반절 삽입 하여 실현 하고 사고 하 다.
3006 단어 데이터 구조삽입 정렬반절 기 삽입 정렬
void BInsertSort(sqList L,int len)
{
//
//
//
//
if(len<=1) return;
for(int i=2;i<=len;i++)
{
//
int low=1,high=i-1;
L.r[0] = L.r[i];
while(low<=high)
{
int mid=(low+high)/2;
if(L.r[mid]<L.r[0]) low=mid+1;
else high=mid-1;
}
//low high
//
for(int j=i-1;j>=high;--j)
L.r[j+1]=L.r[j];
L.r[high+1]=L.r[0];
}
cout<<endl;
cout<<" "<<endl;
for(int i=1;i<=len;i++)
cout<<L.r[i]<<" ";
cout<<endl;
}
여기 서 가장 작은 오류 가 발생 하기 쉬 운 곳 은 삽입 할 위 치 를 비교 할 때 while (low < = high) 순환 입 니 다. 이 등 호 를 가 져 올 지 말 지 헷 갈 리 기 쉽 습 니 다. 이것 은 어떤 구체 적 인 인 인 스 턴 스 를 원 하 는 지 디 버 깅 프로그램 이 인상적 입 니 다.정렬 을 직접 삽입 하 는 것 에 비해 접 는 삽입 정렬 은 비교 횟수 를 줄 이 고 정렬 을 직접 삽입 합 니 다. 삽 입 된 위 치 를 찾 을 때 하나의 비교 가 필요 합 니 다. 접 는 삽입 정렬 은 점프 비교 이기 때문에 비교 하 는 횟수 가 줄 어 들 었 지만 이동 하 는 횟수 는 줄 어 들 지 않 았 습 니 다.코드 를 다 쓰 면 똑똑히 볼 수 있 습 니 다. 반 으로 접 고 정렬 하 는 시간 복잡 도 는 o (n2) 이지 만 비교 횟수 가 줄 었 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.