【C/C++】【数据结构】直接插入排序

插入排序是把一个记录插入到有序序列中,仍使该序列有序,并且长度增加1。

插入排序中最简单的排序方法是直接插入排序。

头文件及其他函数代码见https://blog.csdn.net/qq_42379345/article/details/81366150

直接插入排序函数

int ListInsertSort(SqList *list, ElemType elem, int (*p)(ElemType, ElemType))
{
	int i, j;

	if(NULL == list || NULL == list->elem)
	{
		return FAILURE;
	}

	if(list->length >= SIZE)
	{
		return FAILURE;
	}

	for(i = 0; i < list->length; i++)
	{
		if( TRUE == (*p)( elem, list->elem[i]) ) //找到正确位置
		{
			for(j = list->length; j > i; j-- ) //记录后移
			{
				list->elem[ j ] = list->elem[ j - 1 ];			
			}

			list->elem[i] = elem;
			list->length++;
			
			return SUCCESS;
		}
	}
	list->elem[ list->length ] = elem;
	list->length++;

	return SUCCESS;
}

测试代码

#include<stdio.h>
#include<stdlib.h>
#include "sequencelist.h"
#include<time.h>

void print(ElemType elem)
{
	printf("%d ", elem);
}
int compare(ElemType L_elem, ElemType elem)
{
	if(L_elem == elem)
	{
		return EQUAL;
	}
	else if(L_elem > elem)
	{
		return GREATER;
	}
	else
	{
		return LESS;
	}
}

int main()
{
	SqList L;
	int ret, i;
	ElemType elem;

	srand(time(NULL));

	ret = ListInit(&L);
	if(SUCCESS == ret)
	{
		printf("Init success.\n");
	}
	else
	{
		printf("Init failure.\n");
	}


	for(i = 0; i < 12; i++)
	{
		ret = ListInsertSort(&L, rand() % 10, LT);
		if(SUCCESS == ret)
		{
			printf("Insert success.\n");
		}
		else
		{
			printf("Insert failure.\n");
		}
	}

	ret = ListTraverse(L,print);
	if( FAILURE == ret)
	{
		printf("\nTraverse failure.\n");
	}
	else
	{
		printf("\nTraverse success.\n");
	}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42379345/article/details/81393441