6.用插入排序对任意一组随机数据进行随机数组进行排序(用循环和递归两种方法)

来源:互联网 发布:java软件下载平台 编辑:程序博客网 时间:2024/05/05 09:12
//6.用插入排序对任意一组随机数据进行随机数组进行排序(用递归和循环两种方法写)
/*
插入排序适合边插入边排序
思想:将每个数向后移动


解题步骤:
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");

}



0 0
原创粉丝点击