重复以及排序问题
重复问题
//随机产生五个不重复的数
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main(int argc, const char * argv[]) {
//定义一个数组存放五个数字
int num[5] = {};
//产生五个不重复的数字
for (int i = 0; i < 5; i++) {
//产生随机数字
int temp = arc4random()%9+1;
if (i == 0) {
num[0] = temp;//第一个数字直接输出
} else {
bool isExist = false;//用于判断
for (int j = 0; j < i; j++) {
//有重复
if (temp == num[j]) {
i--;//将本次循环的次数重新归还
isExist = true;
break;//重新循环(出现重复就跳出循环重新产生随机数)
}
}
//保存满足条件的数字
if (isExist == false) {
num[i] = temp;
}
}
}
//输出五个数字
for (int i = 0; i < 5; i++) {
printf("%d\n",num[i]);
}
return 0;
}
排序问题
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main(int argc, const char * argv[]) {
//定义一个数组存放数据
int num[5] = {};
//开始排序
for (int i = 0; i < 5; i++) {
int temp = arc4random()%9+1;//产生随机数
if (i == 0) {
num[0] = temp;//第一个数直接输出
} else {
//开始比较
int j = 0;
for (; j < i; j++) {
//新产生的随机数比之前的数小的情况
if (temp < num[j]) {//新产生的随机数依次与之前的数比较
//将大的数字赋给对应的位置
for (int k = i-1; k >= j; k--) {
num[k+1] = num[k];
}
//将小的数字赋给对应的位置
num[j] = temp;
break;//
}
}
//正常循环出来的,只有正常循环出来的才会有j++,i和j才会相等
//说明产生的随机数正好比之前的大
if (i == j) {
num[j] = temp;
}
}
}
//输出
for (int i = 0; i < 5; i++) {
printf("num[%d] = %d\n",i,num[i]);
}
return 0;
}
//冒泡排序
//依次从头开始和下一个进行比较,大的沉底,通过依次循环,得到一个最大的
#include <stdio.h>
#include <stdlib.h>
int main(int argc, const char * argv[]) {
//已知的数组
int num[5] = {3,0,9,1,7};
//进行比较
//每次循环都会比较出一个最大的并排好位置
for (int j = 4; j > 0 ; j--) {
for (int i = 0; i < j; i++) {
//依次比较
if (num[i] > num[i+1]) {// i + 1 与 j = 4 相互补充,使得可以全部比较
//进行交换
int temp = num[i];
num[i] = num[i+1];
num[i+1] = temp;
}
}
}
//输出
for (int i = 0; i < 5; i++) {
printf("num[%d] = %d\n",i,num[i]);
}
return 0;
}
//选择排序
//先假设一个数是最小的,依次和其他数字比较,得到一个最小的
#include <stdio.h>
int main(int argc, const char * argv[]) {
//创建一个数组
int num[5] = {3,5,0,1,9};
//进行比较
//不停的找出最小的
for (int j = 0; j < 4; j++) {
int min = num[j];//假设最小的
for (int i = j+1; i < 5; i++) {
if (min > num[i]) {//不停的比较
int temp = min;
min = num[i];
num[i] = temp;
}
}
num[j] = min;//将最小的值赋给min
}
//输出
for (int i = 0; i < 5; i++) {
printf("num[%d] = %d\n",i,num[i]);
}
return 0;
}