데이터 구조 삽입 정렬

여기에 이미지 설명을 삽입하세요.
오랜만이네요 요즘 바빠요 일주일 가까이 공부도 안하고 키보드도 거의 낯설어요 오늘은 정렬에 대해서 조금 배웠어요 삽입정렬도 업데이트할게요 나중에 8개 전공을 순차적으로 정리하겠습니다. 업데이트 후에 이진 트리도 있습니다. 이진 트리 편집자는 능력이 제한되어 조금 배웠을 수도 있습니다. 더 이상 고민하지 말고 오늘의 연구에 들어가겠습니다.

삽입 정렬은 앞서 배운 버블 정렬과 다소 유사합니다. 우선 공간 복잡도는 O(N*N)입니다. 삽입 정렬의 전체 과정은 무엇입니까? 먼저 작은 문제를 소개하겠습니다. 오름차순 배열에 숫자를 삽입합니다. 어떻게 삽입합니까? 먼저 이 숫자를 끝부터 비교해야 합니다. 이 숫자보다 크면 앞으로 계속 검색합니다. , 더 큰 숫자를 찾을 때까지 이 숫자보다 크거나 같으면 숫자 끝에 삽입합니다. 삽입 과정에서 이 숫자가 다른 숫자보다 작으면 다른 숫자를 뒤로 이동해야 하는데 이는 오버레이와 동일합니다. , 모두가 쉽게 이해할 수 있도록 여기에 사진을 제공하겠습니다.

여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
적당한 위치를 찾을 때까지 앞으로 계속 걷는다. 중간에 또 다른 과정이 있는데, 덮는 것이다. 도면에는 반영되지 않는다. 조건이 맞지 않으면 덮기 위해 뒤로 이동하는 것을 의미한다. 코드를 보면 이해가 됩니다..

	int end = 9;
		int tmp = a[end + 1];
		while (end >= 0)
		{
    
    
			if (tmp < a[end])
			{
    
    
				a[end + 1] = a[end];
				end--;
			}
			else
			{
    
    
				break;
			}
		}
		a[end+1] = tmp;
	}

9개의 숫자가 있다고 가정합니다. 이제 이 배열에 1을 입력해야 합니다. 어떻게 변경합니까? 위의 코드는 이를 반영할 수 있습니다. 그러면 이 아이디어를 얻은 후 삽입 정렬을 시뮬레이션할 수 있습니까? 사실 매우 쉽습니다. 외부에 루프를 두는 것만큼 간단합니다. 한번 시도해 보겠습니다.

void InsertSort(int* a, int n)
{
    
    
	int i = 0;
	for (i = 0; i < n - 1; i++)
	{
    
    
		int end = i;
		int tmp = a[end + 1];
		while (end >= 0)
		{
    
    
			if (tmp < a[end])
			{
    
    
				a[end + 1] = a[end];
				end--;
			}
			else
			{
    
    
				break;
			}
		}
		a[end+1] = tmp;
	}
}

이런 방식으로 삽입 정렬을 구현할 수 있으며,
헤더 파일

InsertSort.h 도 테스트할 수 있습니다.


#include<stdio.h>

void InsertSort(int* a, int n);

void PrintInsert(int* a, int n);

InsertSort.c

#include"Insert.h"

void InsertSort(int* a, int n)
{
    
    
	int i = 0;
	for (i = 0; i < n - 1; i++)
	{
    
    
		int end = i;
		int tmp = a[end + 1];
		while (end >= 0)
		{
    
    
			if (tmp < a[end])
			{
    
    
				a[end + 1] = a[end];
				end--;
			}
			else
			{
    
    
				break;
			}
		}
		a[end+1] = tmp;
	}
}

void PrintInsert(int* a, int n)
{
    
    
	int i = 0;
	for (i = 0; i < n; i++)
	{
    
    
		printf("%d ", a[i]);
	}
	printf("\n");
}

테스트.c

int main()
{
    
    
	int arr[] = {
    
     9,8,7,6,5,4,3,2,1 };
	InsertSort(arr, sizeof(arr) / sizeof(int));
	PrintInsert(arr, sizeof(arr) / sizeof(int));
	return 0;
}

디버깅 후 순서대로 바꾸시면 됩니다. 오늘은 sort에 대해 이야기해보겠습니다. 편집자가 게으르기 때문에 오늘은 sort 하나만 배웠습니다 ㅎㅎㅎ

다음에 또 만나요

추천

출처blog.csdn.net/2301_76895050/article/details/132698989