// 插入排序算法 // 原理: // 1. 将待排序的数据的后一个逐渐和之前已经排序的数据比较,并在合适的位置将待排序 // 数据插入到已排序数据中
#include "stdio.h" //函数功能:将pArrayIn数据中的iSize个数据进行升序排序 //输入: pArrayIn:待排序序列 // iSize:排序数据的长度 //输出: pArrayIn:已排序序列 //返回: pArrayIn的指针或NULL表示失败 int InsertionSort(int *pArrayIn,int iSize) { int i,j,k; int tmp1; int *pArrayOut; if (NULL == pArrayIn) { return 0; } pArrayOut = (int*)malloc(iSize*sizeof(int)); if ( NULL == pArrayOut ) { return 0; } memset(pArrayOut,0,sizeof(int)*iSize); pArrayOut[0] = pArrayIn[0]; for (i = 1; i < iSize; i++) { tmp1 = pArrayIn[i]; for (j = 0; j < i; j++) { if (tmp1 < pArrayOut[j]) { for (k = i; k > j; k--) { pArrayOut[k] = pArrayOut[k-1]; } pArrayOut[j] = tmp1; break; } } if (j == i) { //Insert To End pArrayOut[j] = tmp1; } } memcpy(pArrayIn,pArrayOut,iSize*sizeof(int)); free(pArrayOut); return 1; }
//TEST Code
#define ARRAY_LEGTH 10 int A[ARRAY_LEGTH];
int main() { int i; srand((int)time(0)); printf("Example for Insertion Sort!\n");
printf("Input Array A[%d] = {",ARRAY_LEGTH); for (i = 0; i < ARRAY_LEGTH; i++) { A[i] = rand()%ARRAY_LEGTH; printf("%d",A[i]); if (i != ARRAY_LEGTH-1) { printf(","); } } printf("}\n");
printf("Sort...\n"); InsertionSort(A,ARRAY_LEGTH);
printf("After Sort:A[%d] = {",ARRAY_LEGTH); for (i = 0; i < ARRAY_LEGTH; i++) { printf("%d",A[i]); if (i != ARRAY_LEGTH-1) { printf(","); } } printf("}\n");
return 1; }