2.排序算法:

输入: 一个数组

1. 冒泡排序

2. 选择排序  (每次选择剩余序列中最小的数)

#include <iostream>
#include <iomanip>
using namespace std;
const int SIZE_LEN=10;void bulb_sort(int [], int );
void select_sort(int [], int);
void display_array(int [], int);// 冒泡排序  选择排序
int main(int argc, char *argv[])
{int a[SIZE_LEN];cout << "Enter ten numbers: " << endl;for(int i=0; i<SIZE_LEN; i++){cin >> a[i];}cout << "Enter end" << endl; //bulb_sort(a, SIZE_LEN);select_sort(a, SIZE_LEN);display_array(a, SIZE_LEN);return 0;
}void bulb_sort(int seq[], int SIZE) // 冒泡排序 {//int len = sizeof(seq) / sizeof(int);//bool ischanged = true;while(true){bool ischanged = false;  // 记录数据是否发生了调换 for(int i=0; i<SIZE-1; i++){if(seq[i]>seq[i+1])   // 交换相邻的值 {int temp = seq[i];seq[i] = seq[i+1];seq[i+1] = temp;ischanged = true;}      }if(!ischanged)  // 知道数据不再发生调换 break;       }}void select_sort(int seq[], int SIZE)
{for(int i=0; i<SIZE-1; i++){int min_num = seq[i];    int min_index = i;for(int j=i; j<SIZE; j++){if(seq[j]<min_num){min_num = seq[j];   // 更新最小值 min_index = j;      // 最小值的索引 }}int tmp = seq[i];    //最小值与最小位置的数进行交换 seq[i] = seq[min_index];seq[min_index] = tmp;}
}void display_array(int seq[], int SIZE) // c++将数组作为参数,实际传递的是指针
{for(int i=0; i<SIZE; i++){cout << setw(4) << seq[i];}cout << endl;
}

储物柜问题:
问题描述:100个柜子,初始时都关闭,第一个人打开所有的,第二个人从第二个开始,每个两个关闭,从第三个人开始,后续来的第n个人,从第n个柜子开始,每隔n个柜子改变一次状态。最后开着的柜子:

#include <iostream>
#include <iomanip>
using namespace std;
const int SIZE_LEN=100;int reversr_state(int);
int main(int argc, char *argv[])
{int a[SIZE_LEN] = {0};for(int i=0; i<SIZE_LEN; i++){if(i==0){for(int j=0; j<SIZE_LEN; j++)a[j] = 1;   // 第一个学生吧所有的柜子门打开 }else if(i==1)  // 第二个学生从第二个柜子开始,每个两个柜子关闭 {for(int j=i; j<SIZE_LEN; j=j+2)a[j] = 0;     }else   // 后面的第n个学生,每隔n个柜子改变柜子的状态 {for(int j=i; j<SIZE_LEN; j=j+i){a[j] = reversr_state(a[j]);}}      }cout << "The following closet is open: " << endl;int counter = 0;for(int i=0; i<SIZE_LEN; i++){if(a[i]==1){cout << setw(4) << i+1;counter++;if(counter%10==0)cout << endl;}} cout << endl;return 0;
}int reversr_state(int num)
{if(num==0)return 1;elsereturn 0;
}

插入排序:

插入排序的思想是从待排序的序列中选择一个元素,插入到已经有序的元素中,对于整个待排序的序列,一般会认为序列的第一个元素是有序的,从第二个元素开始插入。

#include <iostream>
using namespace std;// 插入排序
template<typename T>
void insertSort(T list[], int n)
{// 插入排序, 参数:list待排序的数组  n数组的大小for(int i=1; i<n; i++){int index = -1;   // 插入的位置 for(int j=0; j<i; j++){if(list[i]<list[j]){index = j;break;}}// 插入操作if(index>=0){T temp = list[i];for(int pos=i; pos>index; pos--){list[pos] = list[pos-1];} // 插入元素list[index] = temp; }}
} int main(int argc, char *argv[])
{int a[10] = {4, 32, 23, 11, 9, 1, 89, 98, 1, 0};insertSort(a, 10);for(int i=0; i<10; i++){cout << a[i] << " ";}cout << endl;return 0;
}

运行结果:

高尔顿盒子问题:

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>
using namespace std;
#define RAND_MAX_FLOAT static_cast<float>(RAND_MAX)
const int para = 11;  // 道尔顿板的大小
const int para_board_width = 41;
const int test_num = 400;
void result_display(int [], int);
int array_sum(int [], int);
void array_disp(int [], int);int main(int argc, char *argv[])
{srand(time(0));int process[para];int outcome[para_board_width] = {0};for(int i=0; i<test_num; i++)  // 进行100次实验 {for(int j=0; j<para; j++)   // 向下落11次 {double tmp = rand()/RAND_MAX_FLOAT;if(tmp>0.5) // 向右偏{process[j] = 1;cout << "R";}else{process[j] = -1;cout << "L";}}cout << endl;int middle = para_board_width/2;  // 道尔顿板的中间位置int index = array_sum(process, para) + middle; // 边界条件设置if(index<0)index = 0;if(index>para_board_width-1)index = para_board_width - 1;cout << index << endl; outcome[index] += 1; }array_disp(outcome, para_board_width);result_display(outcome, para_board_width);//int c[9] = {0,3,0,3,3,0,3,0,1};//result_display(c, 9);//cout << array_sum(c, 9) << endl;//array_disp(c, 9);//return 0;
}void result_display(int array[], int SIZE_LEN)  // 输出最后的结果
{int max = 0;// 找到数组的最大值 for(int i=0; i<SIZE_LEN; i++){if(array[i]>max)max = array[i];}  // max代表最终要显示多少行 for(int i=0; i<max; i++)  // 行数 {for(int j=0; j<SIZE_LEN; j++){int delta = max - array[j];if(i>=delta){cout << "o";} else{cout << " ";}}cout << endl;  // 换行 }     cout << endl;
} int array_sum(int array[], int array_size){int sum = 0;for(int i=0; i<array_size; i++){sum += array[i];}return sum;} void array_disp(int array[], int array_size)
{for(int i=0; i<array_size; i++){cout << setw(4) << array[i];}cout << endl;
}

从数组中查找一个姓名,并且删除这个姓名:

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>
#include <string>using namespace std;void printArray(string*, int);int main(int argc, char *argv[])
{cout << "Enter the capacity: ";int capacity;cin >> capacity;string* p = new string[capacity];cout << "Enter " << capacity << " names: " << endl;for(int i=0; i<capacity; i++){cin >> p[i];}printArray(p, capacity);cout << "Enter the name you want to delete: ";string name;cin >> name;bool found_flag = false;int index;for(int i=0; i<capacity; i++){if(p[i]==name){found_flag = true;index = i;break;}    }if(found_flag)  // 找到了{for(int k=index; k<capacity-1; k++){p[k] = p[k+1];}capacity--;cout << "Name " << name << " is successfully deleted from nameList" << endl;}else{cout << name << " is not in the nameList." << endl;}printArray(p, capacity); return 0;
}void printArray(string* nameList, int num)
{for(int i=0; i<num; i++){cout << nameList[i] << endl;}cout << endl;
}

------------------------------------------分割线---------------------------------------------------------

c++课后题(2) 数组排序相关推荐

  1. python语言程序设计基础第二版第六章答案-Python语言程序设计基础(第2版) 课后题 第六章...

    课后题是配套的参考答案 #e10.1CalHamlet.py def getText(): txt = open("hamlet.txt", "r").read ...

  2. 鱼c论坛python课后题-【零基础】Python3学习课后练习题(十九)

    本文是跟着鱼C论坛小甲鱼零基础学习Python3的视频学习的,课后题也是跟随每一课所附属的题目来做的,根据自己的理解和标准答案记录的笔记. 第二十一课 测试题: 0.请使用lambda表达式将下边函数 ...

  3. 大连理工大学c语言第三次上机作业答案,大连理工大学软件学院C语言上机第五六章课后题...

    大连理工大学软件学院C语言上机第五六章课后题 五.1. #includeint main() { int a,b,c; float X,Y,Z; scanf("%d%d%d",&a ...

  4. 谭浩强课后题(数组篇)

    谭浩强课后题(数组篇) 用筛法求素数 冒泡排序 逆序存放数组元素 奇数阶魔方 用筛法求素数 代码: #include<stdio.h> #include<string.h> # ...

  5. Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类)设计一个名为Person的类及其两个名为Student和Employee的子类

    Java黑皮书课后题第11章:11.2(Person Student Employee Faculty Staff类) 题目 缺陷 UML图 代码 Test02_MyDate.java:用于参考的My ...

  6. Java黑皮书课后题第10章:**10.25(新的字符串split方法)String类中的split方法会返回一个字符串数组,该数组是由分隔符分隔开的子串构成的

    Java黑皮书课后题第10章:**10.25(新的字符串split方法) 题目 代码 运行实例 题目 代码 public class Test25 {public static String[] sp ...

  7. Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字

    Java黑皮书课后题第10章:10.21(被5或6整除)找出能被5或6整除的大于Long.MAX_VALUE的前10个数字 题目 代码 结果 题目 都在上面 代码 import java.math.B ...

  8. Java黑皮书课后题第10章:*10.13(几何:MyRectangle2D类)定义MyRectangle2D类

    Java黑皮书课后题第10章:10.3 题目 程序 代码 Test13.java Test13_MyRectangle2D.java 运行 UML 题目 程序 Test13.java:测试程序 Tes ...

  9. Java黑皮书课后题第10章:10.2(BMI类)将下面的新构造方法加入BMI类中

    Java黑皮书课后题第10章:10.2(BMI类)将下面的新构造方法加入BMI类中 题目 程序说明 题目槽点 代码:Test2_BMI.java 运行实例 题目 程序说明 Test2_BMI.java ...

最新文章

  1. ASP.Net定时任务执行
  2. openstack-Icehouse版本部署安装
  3. 做演员是圆梦 做生意学会面对现实
  4. java实现细胞自动机_Java自动机实现
  5. mysql 插入加锁_Mysql加锁过程详解(9)-innodb下的记录锁,间隙锁,next-key锁
  6. 如何验证登录oracle,Oracle登录验证方式详解
  7. 全球首家机器人酒店“大裁员”!别了,人工智障
  8. C的byte数组在python中的处理
  9. 屏幕录制生成gif文件神器和相关操作 GifCam
  10. WebService-服务端与客户端
  11. 一切过往皆序章,一切未来皆可期——2021给自己定个小目标:读完52本书
  12. spring boot mybatis 日志打印配置
  13. 马尔科夫毯(Markov Blanket)
  14. [原创]关于搭建企业级应用的AJAX框架
  15. [JZOJ4763] 【NOIP2016提高A组模拟9.7】旷野大计算
  16. html视频播放器(video)
  17. 艾永亮:运用超级产品战略解决这三大问题,提升企业的竞争优势
  18. LA 3363 String Compression(dp)
  19. 北京大学2018计算机学科夏令营上机考试
  20. docker desktop

热门文章

  1. 理解_RBAC基础概念_Spring Security OAuth2.0认证授权---springcloud工作笔记113
  2. 微服务升级_SpringCloud Alibaba工作笔记0022---Nacos之Group分组方案
  3. SpringCloud工作笔记069---The Hystrix timeout of 60000ms for the command sc-auth is set lower than the
  4. 云计算学习笔记002---云计算的理解及介绍,google云计算平台实现原理
  5. java修饰符作用域
  6. python built-in cache (don't reinvent the wheel)
  7. nnlm代码解读链接
  8. Lua中的协同程序 coroutine
  9. 游戏计算机软著登记证书,“VR沙盘游戏心理疗法软件”取得计算机软件著作权登记证书...
  10. 随想录(jtag知识点小结)