本帖最后由 mangnani 于 2015-11-20 22:19 编辑
包含技术内容:选择排序 正序 倒序 冒泡排序 正序 倒序 输入 输出 函数调用 地址传递 三目运算符 等 包含了 前期基础的很多内容
函数功能:自己定义数组长度 输入元素 定义数组 选择 排序方法 以及 排序顺序 实现排序
总共100行左右的代码每一部分都有细节的注释
手打的,大家支持一下。
#include <stdio.h>
//通过参数传递 获得 数组地址 对主函数中的 数组 进行操作 接收数组长度 于 选择 正倒序 输出参数
void xuanZePaiXu(int a[],int len, int flag){
//定义一个 tempmax 假设为 数组元素中 最大值 所对应的 下标 为 0 也就是假设第一位是最大值
int tempmax=0;
//双层for循环 实现 比较 以及 交换
//外层for循环控制 需要排列的 数字有几个。比如数组有5个元素 只要排好4个即可 所以 i小于len-1
for (int i=0; i<len-1; i++) {
//tempmax=i 控制 每次 交换的起点 (比较元素 起点 )为i
tempmax=i;
//内循环控制 每一轮排序 需要比较的次数 j控制 被对比元素 起点 j=1+i
for (int j=1+i; j<len; j++) {
//通过单目运算符 实现 通过参数 控制 正序或 倒序 输出
// 比较 假设最大元素下表 于 其他元素进行比较 并对tempmx进行重新赋值
//若是小于 那么挑选出来的是 最小值 大于 是最大值
if (flag ? (a[tempmax]>a[j]):(a[tempmax]<a[j])) {
tempmax=j;
}
}
//每一轮求出来的最大或者最小元素 于 每一轮比较第一个元素进行交换
int temp=a;
a=a[tempmax];
a[tempmax]=temp;
}
}
// 通过 参数的传递 获得 需要改动的数组 于 数组的长度 以及 控制正序 倒序 输出的 参数flag
void maoPaoPaiXu(int a[],int len,int flag){
//定义变量 temp 为临时值 用于最后交换
int temp=0;
//外轮循环控制 需要排序的次数 5个元素的只需要排序4次 所以 循环次数 为len-1次
for (int i=0; i<len-1; i++) {
//内循环控制 每一轮比较的次数 j<len-1-i 每一轮少比较一次
// j也代表 比较元素的起点
for (int j=0; j<len-1-i; j++) {
// 通过比较 相邻值 大小 交换 前后数值 实现 大数下沉(正序)或 小数下沉(倒序)
//通过 参数 flag 以及三木元算 控制 正倒顺序,
if (flag?(a[j]>a[j+1]):(a[j]<a[j+1])) {
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
//定义一个输出 数组元素的函数 参数为 数组地址 以及 数组长度
void print_a(int a[],int len){
//通过for循环 实现 数组的输出
for (int i=0; i<len; i++) {
printf("%d\t",a);
}
printf("\n");
}
int main(int argc,const char*argv[]){
//定义一个选择方法 变量
int solution;
//定义一个数组变量 作为 数组长度
int len;
//提示用户输入 数组长度
printf("请输入一个数字规定 数组的长度\n");
//接收用户输入长度
scanf("%d",&len);
//通过len定义一个数组a
int a[len];
//提示用户输入元素完善数组
printf("请根据长度输入一组整形数字完善数组,每输入一个数用enter确认\n");
//通过for循环接受用户输入元素 完善数组
for (int i=0; i<len; i++) {
scanf("%d",&a);}
//输出 用户 完善的 数组
print_a(a,len);
int flag;
//提示用户 选择 正序活着倒序
printf("请选择正序或者倒序 排列数组 正序 输入1+enter 倒序输入 0+enter\n");
//接受用户输入的 flag
scanf("%d",&flag);
//提示用户 选择 排序方法
printf("请选择冒泡排序活着选择排序方法 排列数组 冒泡 输入1+enter 选择输入 0+enter\n");
//接受用户输入排序方法
scanf("%d",&solution);
//通过用户输入的参数 实现功能
solution?maoPaoPaiXu(a,len,flag):xuanZePaiXu(a,len,flag);
//通过 调用输出函数 实现输出元素
print_a(a,len);
}
|