当前位置: 首页 > news >正文

网站建设微信商城开发军事新闻头条

网站建设微信商城开发,军事新闻头条,wordpress公司企业,电子商务网站建设步骤一般为目录 一、冒泡排序 1.冒泡排序的原理 2.实现冒泡排序 1.交换函数 2.单躺排序 3.冒泡排序实现 4.测试 5.升级冒泡排序 6.升级版代码 7.升级版测试 二、选择排序 1.选择排序的原理 2.实现选择排序 1.单躺排序 2.选择排序实现 3.测试 ​4.修改 5.测试 一、冒泡排序…目录 一、冒泡排序 1.冒泡排序的原理 2.实现冒泡排序 1.交换函数 2.单躺排序 3.冒泡排序实现 4.测试 5.升级冒泡排序 6.升级版代码 7.升级版测试 二、选择排序 1.选择排序的原理 2.实现选择排序 1.单躺排序 2.选择排序实现 3.测试 ​4.修改 5.测试 一、冒泡排序 1.冒泡排序的原理 1.从尾部开始比较相邻的两个元素如果尾部的元素比前面的大就交换两个元素的位置。这种方法是排升序的想排降序的话一旦尾部的元素比前面的小就交换即可 比方说我有一个数组里面存放的是9 6 3这三个数字我的尾部是下标为0的数也就是9往下走遇到了69比6大所以交换数组就会变为6 9 3 2.往前对每个相邻的元素都做这样的比较和交换未排序中最大(最小)的那个数就会被排到未排序的数的最后 2.实现冒泡排序 1.交换函数 通过原理的讲解不难看出冒泡排序要实现多次的交换因此我们可以写一个简单的交换函数 void Swap(int* x, int* y) {int tmp *x;//创建中间变量储存x*x *y;*y tmp; } 2.单躺排序 void BobbleSort(int* arr, int n) //传递数组和数组元素个数 {int j 0;for (j 0; j n - 1; j)//jn-1避免越界{if (arr[j] arr[j 1])//不断地进行比较一遇到大的就进行交换会将最大的数移动到数组的最后{Swap(arr[j 1], arr[j]);}} } 3.冒泡排序实现 一趟排好一个数那么我们一共有n个数那么循环次数就可以修改成n次 void BobbleSort(int*arr,int n) //传递数组和数组元素个数 {int i 0;int j 0;for (i 0; i n; i)//n次排序排n个数{for (j 0; j n - 1; j)//jn-1避免越界{if (arr[j] arr[j 1])//不断地进行比较一遇到大的就进行交换会将最大的数移动到数组的最后{Swap(arr[j 1], arr[j]);}}} } 4.测试 int main() {int arr[] { 9,6,7,5,2,3,4,1,8};int size sizeof(arr) / sizeof(arr[0]);BobbleSort(arr,size);int i 0;for (i 0; i size; i){printf(%d , arr[i]);}printf(\n); } 5.升级冒泡排序 1.我们可以看出每次我们进行完一趟排序后未排序中最大(最小)的那个数就会被排到未排序的数的最后因此我们没有必要去和那些已经排好序的数作比较所以我们可以把单躺循环判断语句改写成jn-i-1i代表已经排好序的数的个数减去i就可以避免与这些数重复的比较。 2.如果数组已经有序我们还在比较显然就会浪费大量的时间    可以看出如果数组无序的话那个未排序中最大(最小)的那个数就会被排到未排序的数的最后期间一定会出现交换而如果有序的话就一定不会出现交换。 因此我们可以通过一个flaw变量来实现每次进行新的一趟排序前先将flaw变量初始化为1一旦发生交换就令它为0再在最外面根据flaw来判断是否发生了交换如果发生了交换那么数组依然无序若是没有则有序结束函数 6.升级版代码 void BobbleSort(int*arr,int n) //传递数组和数组元素个数 {int i 0;int j 0;for (i 0; i n; i)//n次排序排n个数{int flaw 1;for (j 0; j n -i- 1; j)//jn-1避免越界{if (arr[j] arr[j 1])//不断地进行比较一遇到大的就进行交换会将最大的数移动到数组的最后{Swap(arr[j 1], arr[j]);flaw 0;}}if (flaw 1){return;}} } 7.升级版测试 二、选择排序 1.选择排序的原理 选择排序十分的简单粗暴就是在数组中找到最大值和最小值然后把它们放到对应的位置如果你想排升序最大值放右边最小值放左边排降序相反即可。  2.实现选择排序 1.单躺排序 第一趟排序我们找到最大值和最小值然后把它们放在对应的位置即可 void SelectSort(int*arr,int n) {int max 0;int min 0;//max和min均储存下标int i 0;for (i 0; i n; i){if (arr[max] arr[i]){max i;}if (arr[min] arr[i]){min i;}}Swap(arr[0] arr[min]);//将最小值放到最前面Swap(arr[n-1],arr[max]);//将最大值放到最后} 2.选择排序实现 思考要排几趟可以看出每次都会将最大和最小的排到对应的位置那么循环差不多就是for(j0;jn/2;j); 但要不要带上等号呢。这个可以代入实例进行思考比方说一共有5个元素你要给它进行两次排序即可而5/22j2,进行2次循环满足条件一共有6个元素要进行三次排序6/2*3,j3,进行3次循环满足条件。奇偶数均检验故无需带上等于号。 思考细节每比较一次我们需要比较的区间就会缩小。所以应将查找最大最小的循环修改成for(ij;in-j;i); 同理max和min的下标也不能一直都是0区间减小了你却使用到区间之外的数显然不对max,min应初始化为j void SelectSort(int* arr, int n) {int i 0; int j 0;for (j 0; j n / 2; j){int max j; int min j;//max和min均储存下标for (i j; i n - j; i){if (arr[max] arr[i]){max i;}if (arr[min] arr[i]){min i;}}Swap(arr[j], arr[min]);//将最小值放到最前面Swap(arr[n - 1 - j], arr[max]);//将最大值放到最后} } 3.测试 4.修改 为什么会出错呢仔细思考你会发现若是max和j相等的话j先和min进行交换那么此时的j就不再是最大值的下标了自然会出错因此当max和j相等的时候应该在交换之后使max更新为min更新到真正最大值的下标。 void SelectSort(int* arr, int n) {int i 0; int j 0;for (j 0; j n / 2; j){int max j; int min j;//max和min均储存下标for (i j; i n-j; i){if (arr[max] arr[i]){max i;}if (arr[min] arr[i]){min i;}}Swap(arr[j], arr[min]);//将最小值放到最前面if (j max)//更新{max min;}Swap(arr[n - 1 - j], arr[max]);//将最大值放到最后} } 5.测试 至此冒泡排序和选择排序讲解完成感谢各位友友的来访祝各位友友前程似锦O(∩_∩)O
http://www.pierceye.com/news/72978/

相关文章:

  • 网站备案账号新做的网站怎样推广
  • 中国电子商务网站免费合作加工厂
  • 网站制作流程图石家庄核酸检测
  • 做网站贵不贵wordpress全部设置
  • 单人做网站域名在哪里申请
  • 做网站要注册第35类商标吗上海公司牌照价格走势
  • 价格低的英文怎么说烟台企业网站怎么优化
  • 网站建设需求文档模版阿里巴巴做轮播网站
  • 网站建设销售找客户话术win7一键优化工具
  • 北京十佳网站建设门户网站建设文案
  • 网站建1设公司外汇申报在哪个网站上做
  • 室内装饰设计师国家职业标准网站视觉优化的意义
  • 询盘网站网站所有权查询
  • 网站建设 设计那种连接线厂家建设网站所需的费用的估算
  • 盗版小说网站怎么做的禹州市城乡建设局网站
  • 长沙有网站建站吗h5case是什么网站
  • 做网站的logoWordPress打开有广告
  • 网站添加模块适合新手做的网站
  • 遵义公司建网站要多少费用主流的网站开发工具
  • 镇海淘宝网站建设html网页表格制作
  • 网站配色原则wordpress+icon图标
  • 重庆营销网站建设公司排名免费seo视频教程
  • 商务网站建设sz886挖掘爱站网
  • 密云做网站网站有收录就会排名吗
  • 寻找基础微网站开发兰州家政公司
  • 网站公司网站定制曹县做网站建设
  • 杭州知名的企业网站建设策划怎么做潮牌网站
  • 做网站需要先学什么有趣的网站游戏
  • 公司做网站用什么主机山东莱芜最新新闻
  • 网站型跟商城型建筑机械人才培训网官网