文章目录

  • 前言
  • 一、第一题:实验步骤及结果
  • 二、第二题:实验步骤及结果

前言

解决以下两个问题:
1、实现10个数据的快速排序(升序);
2、有一个数组A[10],里面存放了10个整数,顺序递增。任意输入一个数字n,找到n在数组中的位置。如果n不属于该数组A,显示错误提示。A[10]={2,3,5,7,9,11,12,15,19,22}.


一、第一题:实验步骤及结果


#include <stdio.h>
void display(int array[], int maxlen)
{int i;for(i = 0;i<maxlen;i++){printf("%5d",array[i]);}printf("\n");return ;
}
void display2(int array[], int maxlen)
{int i;for(i=9;i>-1;i--){printf("%5d",array[i]);}printf("\n");return ;
}
void QuickSort(int *arr, int low, int high)
{if (low < high){int i = low;int j = high;int k = arr[low];while (i < j){while(i < j && arr[j] >= k) {j--;}if(i < j){arr[i++] = arr[j];}while(i < j && arr[i] < k)    {i++;}if(i < j){arr[j--] = arr[i];}}arr[i] = k;QuickSort(arr, low, i - 1);    QuickSort(arr, i + 1, high);    }
}int main()
{   int i,c;int array[10];printf("请输入十个数将进行升序\n");for(i=0;i<10;i++){printf("你输入的第%d个数是  ",i+1);scanf("%d",&array[i]);}printf("排序前的数组\n");display(array,10);QuickSort(array, 0, 9);printf("想要升序排列请按1\n想要降序排列请按2\n");scanf("%d",&c);if(c==1){printf("排序后的数组(升序)\n");display(array, 10);}else if(c==2){printf("排序后的数组(降序)\n");display2(array, 10);}else{printf("请正确输入,亲");}return 0;
}

实现效果:


思路解释:
1.构造一个display函数用于最后的输出,以及刚开始的输出
2.建立数组用来存放要排序的值
3.建立quicksort函数,传入三个值末尾值、开始值,以及数组
通过比较不断更改数组值得位置的下标,利用递归不断交换
4.升序降序输出就是更改数组输出的方式。

二、第二题:实验步骤及结果

#include <stdio.h>
#include <conio.h>
void QuickSort(int *arr, int low, int high)
{if (low < high){int i = low;int j = high;int k = arr[low];while (i < j){while(i < j && arr[j] >= k) {j--;}if(i < j){arr[i++] = arr[j];}while(i < j && arr[i] < k)    {i++;}if(i < j){arr[j--] = arr[i];}}arr[i] = k;QuickSort(arr, low, i - 1);    QuickSort(arr, i + 1, high);    }
}
int main(){int a[10];int i,num,n,low,high,mid,m;printf("请输入十个数的数组:\n");for(i=0;i<10;i++){printf("请输入第%d个数 ",i+1);scanf("%d",&a[i]);}printf("你输入的数组是\n");for(m=0;m<10;m++){printf("%5d",a[m]);}QuickSort(a, 0, 9);printf("\n从小到大排序后的数组是\n");for(m=0;m<10;m++){printf("%5d",a[m]);}printf("\n请输入数组中的一个数将查验此数位置:");scanf("%d",&num);n=10;low=0;high=n-1;while(low<=high){mid=(low+high)/2;if(num<a[mid])high=mid-1;else if(num>a[mid])low=mid+1;else if(num==a[mid]){printf("亲您选择的**%d**是数组中**第%d个**元素的值",num,mid+1);break;}}if(num!=a[mid])printf("无此数");getch();return 0;
}

运行结果:

思路解释:
第二题算是对第一题的触类旁通吧,只是多了一个下标的思路来查找元素的值。

分治算法解决问题(c语言)相关推荐

  1. 分治算法详解(带图)

    实际场景中,我们之所以觉得有些问题很难解决,主要原因是该问题涉及到大量的数据,如果只需要处理少量的数据,问题会变得非常容易解决. 举一个简单的例子,设计一个排序算法实现对 1000 个整数进行排序.对 ...

  2. koch算法c语言递归,【挑战程序设计竞赛】 递归与分治算法

    [挑战程序设计竞赛] 递归与分治算法 [挑战程序设计竞赛] 递归与分治算法 递归与分治算法穷举搜索题目 思路 代码 科赫曲线题目 思路 代码 将问题分解,通过求解局部性的小问题来解决原本的问题,这种技 ...

  3. c语言分治算法之归并排序,分治算法之归并排序

    分治算法: 将一个规模为N的问题分解为K个规模较小的子问题,这些子问题互相独立且与原问题性质相同.求出子问题的解后进行合并,就可得到原问题的解. 一般步骤: 1.分解,将要解决的问题划分成若干规模较小 ...

  4. 算法导论—分治策略(C语言)

    在分治策略中,我们递归的求解一个问题,在每层递归中应用以下三个步骤: 1.分解   将问题划分为一个个子问题,子问题形式与原问题一致,只是规模更小 2.解决   这里的解决是指递归的求解出子问题,或对 ...

  5. 大数相乘(C语言,分治算法)

    问题: 由于编程语言提供的基本数值数据类型表示的数值范围有限,不能满足较大规模的高精度数值计算,因此需要利用其他方法实现高精度数值的计算,于是产生了大数运算.大数运算主要有加.减.乘三种方法. 下面就 ...

  6. c语言叠罗汉问题解决思路,如何利用分治算法解决 ‘叠罗汉’ 问题,也叫作汉诺塔问题...

    问题: 将A塔的所有盘子移动到C塔,期间可借助B塔,但一直要保证大盘下,小盘上 使用java写了分治算法,化大为小,分而治之,加上递归,便可轻松解决这个问题! static int step = 0; ...

  7. aes算法实现c语言_以C语言实现归并排序为例,谈谈五大常用算法之一的“分治法”...

    分治算法,顾名思义就是"分而治之",即把规模较大的复杂问题拆分为若干规模较小的类似子问题,并逐个解决,最后再将各个子问题的解决结果合并,得到原始问题的结果的方法.这个技巧是很多高效 ...

  8. 用python求两个人的平均身高_黄哥Python:分治算法(Divide-and-Conquer)

    分治算法(Divide-and-Conquer) 在计算机科学中,分而治之(简称分治法)是基于多分支递归的算法设计范例.分而治之算法的工作原理是将问题递归分解为两个或多个相同或相关类型的子问题,直到这 ...

  9. 分治算法:根号n段合并排序算法

    问题: 将数组 a[0,n-1]划分为 根号n 个子数组,每个子数组有 O(根号n)个元素.然后递归地对分割后的子数组进行排序,最后将所得到的根号n 个排好序的子数组合并排序. 工具与语言 我选择的为 ...

最新文章

  1. NextGEN Gallery ~ 最强WordPress相册插件
  2. Python自动化办公之Excel对比工具
  3. NVIDIA 显卡与 CUDA 在深度学习中的应用
  4. Spring Boot定时任务-Quartz介绍
  5. 在ubuntu中使用cookiecutter搭建django项目时命令迟迟没有反应
  6. Linux 命令之 tcpdump -- 监听网络流量
  7. 谷歌、脸书、魔兽世界都在用!InnoDB是什么?有哪些关键特性?
  8. IOS 代码控制控件始终居中
  9. C#操作SQLite数据库
  10. 如何在SQL Server中创建视图
  11. mysql inno_mysql inno优化配置方法
  12. Transformers实战系列 之 文本生成
  13. Ubuntu 20.04 安装 ModSecurity3.0+Nginx
  14. .net c#购物车模块分析
  15. JS中innerHTML 和innerText和value的区别
  16. 03-Axure9默认元件库
  17. idea 因破解而无法打开的问题
  18. 简述轻量级与重量级(框架,应用,组件)
  19. 我的世界Java种子算法_Minecraft:说说“种子”的使用和原理吧
  20. 一个让Google、Facebook、Amazon都羡慕的平台,为什么说阿里妈妈是数字营销的未来...

热门文章

  1. vue实现某一区域滚动,头部底部固定,中间滚动
  2. [1106]python bezier(贝塞尔)曲线
  3. 柱状图中xy轴怎么出现_『怎样设置excel图标的x、y轴』excel图表xy轴名称
  4. python深度学习--jena温度预测
  5. 基础入门-算法逆向散列对称非对称JS源码逆向AESDESRSASHA
  6. pil.unidentifiedimageerror: cannot identify image file
  7. 自己构建iSCSI磁盘阵列
  8. buu [MRCTF2020]天干地支+甲子 1
  9. Android实现资源动态加载的两种方式
  10. 如何在vue中设置全局方法