/*
插入排序适合边插入边排序
思想:将每个数向后移动
解题步骤:
1.循环条件的判断
2.将前面的数向后移动一位
3.将要交换的数跟未移动前面的数进行比较,如果适合条件交换就交换,否则不交换,
4.重复步骤2,3
*/
//模拟插入
模拟插入排序
#include<stdio.h>
#include<time.h>
#define N 6
void main()
{
int a[6] = { 6, 6, 6, 6, 7, 8 };
int i = 5;
int temp;
temp = a[i];
while (i>0&&temp<a[i-1])
{
a[i] = a[i - 1];
i--;
if (temp > a[i - 1])
{
a[i]=temp;
break;
}
}
for (int i = 0; i < 6; i++)
{
printf("%d ",a[i]);
}
system("pause");
}
//用循环方法
#include<stdio.h>
#include<time.h>
#define N 20
void main()
{
int a[N];
time_t ts;//初始化随机数组
unsigned data = time(&ts);
srand(data);//创建随机种子
//初始化数组
printf("没有排序时:\n");
for (int i = 0; i < 20; i++)
{
a[i] = rand() % 300;
printf("%d ", a[i]);
}
//开始进行排序
printf("\n");
for (int i = 0; i < N; i++)
{
int temp = a[i];
int j = i;
while (j>0 && temp<a[j - 1])
{
a[j] = a[j - 1];
j--;
if (temp > a[j - 1])
{
a[j] = temp;
break;
}
}
}
printf("排序后:\n");
for (int i = 0; i < 20; i++)
{
printf("%d ", a[i]);
}
printf("\n");
system("pause");
}
//用递归解决插入排序
#include<stdio.h>
#include<time.h>
#define N 20
void ChaRu(int i, int a[]);
void ChaRu(int i, int a[])
{
if (i==20)
{
return;
}
int temp;
temp = a[i];
while (i > 0 && temp<a[i - 1])
{
a[i] = a[i - 1];
i--;
if (temp > a[i - 1])
{
a[i] = temp;
break;
}
}
ChaRu(i + 1, a);
}
void main()
{
//初始化数组
int a[N];
time_t ts;
unsigned int data = time(&ts);
srand(data);//创建随机种子
for (int i = 0; i < N; i++)
{
a[i] = rand() % 300;
}
ChaRu(0, a);
for (int i = 0; i < N; i++)
{
printf("%d ", a[i]);
}
printf("\n");
system("pause");
}