一. 把复杂的问题拆解成多个简单的问题
1、单趟排序
2、多趟排序
时间复杂度O(N^2)
最坏情况:逆序 最好情况:顺序
//直接插入排序
void InsertSort(int *src, int n)
{
//多趟排序
for (int i = 0; i < n - 1; ++i)
{
//单趟排序(升序)
int end=i;
int tmp = src[end + 1];
while (end >= 0)
{
if (tmp < src[end])
{
src[end + 1] = src[end];
--end;
}
else
{
break;
}
src[end + 1] = tmp;
}
}
}
二. 核心思想:1,拷贝 2,平移,3,插入
void InsertSort(int * src, int n)
{
int i, j;
int tmp;
for (i = 1; i < n; i++)
{
tmp = src[i];
for (j = i; j > 0 && src[j - 1] > tmp; j--)
{
src[j] = src[j - 1];
}
src[j] = tmp;
}
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "sort.h"
#define BUFSIZE 10000
void printArray(int * src, int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ", src[i]);
}
putchar('\n');
}
int main()
{
#if 0
int src[10] = { 3, 1, 6, 7, 9, 2, 4, 8, 10, 5 };
InsertSort(src, 10);
printArray(src, 10);
#else
srand(time(NULL));
int src[BUFSIZE];
int i;
for (i = 0; i < BUFSIZE; i++)
{
src[i] = rand() % 5000 + 1;
}
InsertSort(src, BUFSIZE);
printArray(src, BUFSIZE);
#endif
return 0;
}