Java가 정렬에 직접 삽입하는 세 가지 실현
설정된 수조는 a[0...n-1]이다.
1. 처음에 a[0]는 1개의 질서 구역을 만들었고 무질서 구역은 a[1.n-1]이다.령i=1
2. a[i]를 현재의 질서 구역 a[0...i-1]에 병합하여 a[0...i]의 질서 구간을 형성한다.
3. i++ 및 i==n-1까지 두 번째 단계를 반복합니다.정렬이 완료되었습니다.
다음은 정의에 따라 엄격하게 작성된 코드(작은 것부터 큰 것까지)를 보여 줍니다.
void Insertsort1(int a[], int n)
{
int i, j, k;
for (i = 1; i < n; i++)
{
// a[i] a[0...i-1]
for (j = i - 1; j >= 0; j--)
if (a[j] < a[i])
break;
//
if (j != i - 1)
{
// a[i]
int temp = a[i];
for (k = i - 1; k > j; k--)
a[k + 1] = a[k];
// a[i]
a[k + 1] = temp;
}
}
}
이런 코드는 너무 길어서 명확하지 않다.이제 개작을 진행하여 검색과 데이터를 이동한 후 이 두 단계를 통합합니다.즉, 매번 a[i]가 먼저 앞의 데이터 a[i-1]과 비교한다. 만약에 a[i]>a[i-1]가 a[0...i]도 질서가 있고 조정할 필요가 없다는 것을 설명한다.그렇지 않으면 j=i-1,temp=a[i].그리고 데이터 a[j]를 뒤로 이동하면서 앞으로 검색합니다. 데이터 a[j]
void Insertsort2(int a[], int n)
{
int i, j;
for (i = 1; i < n; i++)
if (a[i] < a[i - 1])
{
int temp = a[i];
for (j = i - 1; j >= 0 && a[j] > temp; j--)
a[j + 1] = a[j];
a[j + 1] = temp;
}
}
다시 a[j]를 앞의 a[0...j-1]에 삽입하는 질서정연한 구간에 사용하는 방법을 개작하고 데이터 교환으로 데이터를 대체한 후 이동합니다.만약에 a[j]의 이전 데이터 a[j-1]>a[j]가 있으면 a[j]와 a[j-1]를 교환하고 a[j-1]<=a[j]까지 교환한다.이렇게 하면 새로운 데이터를 질서정연한 구간에 새로 병합할 수 있다.
void Insertsort3(int a[], int n)
{
int i, j;
for (i = 1; i < n; i++)
for (j = i - 1; j >= 0 && a[j] > a[j + 1]; j--)
Swap(a[j], a[j + 1]);
}
이상은 본문의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 일정한 도움을 줄 수 있는 동시에 저희를 많이 지지해 주시기 바랍니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.