数组的排序方法
1.冒泡排序法
原理:依次从头开始将第一个数和下一个数进行比较,大的往后放,通过依次循环得到最大的数,重复循环该操作直到排序结束。
#include<stdio.h>
int main()
{
int a[10]={3,0,1,8,7,2,5,4,9,6};
int i,j,m;
for(i=0;i<9;i++){//找到一个最大的数沉底
for(j=0;j<10-i;j++){//让j和j+1进行比较
if(a[j+1]<a[j]){
m=a[j];
a[j]=a[j+1];
a[j+1]=m;//交换顺序,引入第三变量
}
}
}
for(i=0;i<10;i++){
printf("%d",a[i]);
}
return 0;
}
/*冒泡排序实现方式:每次遍历整个数组找到最大的一个数沉底,如果数组有n个元素,第一次遍历n-1次
第二次需要遍历n-2次,直到循环n-1次
第一次循环控制总共遍历多少次
第二层循环控制每次需要遍历多少次才能找到最大
每次从头开始i=0,让i和i+1比较,确保i+1最大
循环层级最好不多于两个
一个循环:一次遍历就结束
二个循环:每一次内部又有遍历
*/
2.选择排序法
和冒泡排序类似,只不过是先选择最小的,依次和其他数进行比较,通过交换让值保持最小,这样每一次循环就会得到一个最小的值。
#include<stdio.h>
int main()
{
int a[10]={3,0,1,8,7,2,5,4,9,6},i,j,m;
for(i=0;i<10-1;i++){
for(j=i+1;j<10;j++){//从i后面找最小的数到i的位置
if(a[j]<a[i]){
m=a[j];
a[j]=a[i];
a[i]=m;
}
}
}
for(i=0;i<10;i++){
printf("%d",a[i]);
}
return 0;
}
/*选择排序:外层循环控制需要遍历多少次:n-1次
内层循环找到当前最小的数
*/
3.插入排序法
原理:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
#include<stdio.h>
int main()
{
int a[10]={3,0,1,8,7,2,5,4,9,6};
int i,j,m;
for(i=0;i<10-1;i++){//外部控制次数
if(a[i+1]<a[i]){
m=a[i];
a[i]=a[i+1];
a[i+1]=m;
for(j=i;j>0;j--){
if(a[j]>a[j-1]){
break;//当前位置就是这个数字的位置
}
else{
m=a[j];
a[j]=a[j-1];
a[j-1]=m;//j和j-1换位置
}
}
}
}
for(i=0;i<10;i++){
printf("%d",a[i]);
}
return 0;
}
排序方法应用,猜数字
游戏规则:
自动产生4个不重复的由小到大排序的1-9之间的随机数,并用排序方法进行排序。玩家对四个数字进行猜测,猜测的数字数值和位置都正确的情况下A前面的数字加1,猜测的数字数值而位置不正确的情况下B前面的数字加1,结果为4A的时候代表全对!
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
printf("********\n");
unsigned int seed=time(NULL);
srand(seed);
int i,j,m,random,a[4], aCount = 0,bCount = 0,input[4];
for(i=0;i<4;i++){
random=rand()%9+1;
if(i==0){
a[i]=random;
// printf("%d",a[i]);
}
else{
for(j=0;j<i;j++){
if(random==a[j]){
break;
}
}
if(i==j){
a[i]=random;
//printf("%d",a[i]);
}
else{
i--;
}
}
}
for(i=0;i<3;i++){
for(j=i+1;j<4;j++){
if(a[j]<a[i]){
m=a[j];
a[j]=a[i];
a[i]=m;
}
}
}
for(i=0;i<4;i++){
printf("%d",a[i]);
}
printf("\n");
printf("********\n");
//开始游戏
while(1){
//提示输入
printf("请输入猜测的数字:");
for(int i = 0; i < 4; i++) {
scanf("%d", &input[i]);
}
//开始
//1 5 8 9
//1 2 3 5
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (a[i] == input[j]) {//数字存在 判断位置
if (i == j){
aCount++;
}else{
bCount++;
}
}
}
}
//提示用户结果
printf("%dA%dB\n", aCount, bCount);
//判断是否正确
if( aCount == 4){
printf("全对!!!!\n");
break;
}else{
aCount = 0;
bCount = 0;
}
}
return 0;
}









网友评论