从数组中查找最值(三种基本算法)

您所在的位置:网站首页 stata找出最大值 从数组中查找最值(三种基本算法)

从数组中查找最值(三种基本算法)

2024-06-04 02:39| 来源: 网络整理| 查看: 265

程序中,我们经常使用数组(列表)存储给定的线性序列(例如 {1,2,3,4}),那么如何查找数组(序列)中的最大值或者最小值呢?

所以这里简单提供了三种比较常见的算法来查找数组中的最值(这里以查找最大值为例)

普通算法排序算法分治算法 1)普通算法

普通算法的解决思路是:创建两个变量 max 和 min 分别记录数组中的最大值和最小值,它们的初始值都是数组中的第一个数字。从第 2 个数字开始遍历数组,每遇到一个比 max 大的数字,就将它存储到 max 变量中;每遇到一个比 min 小的数字,就将它存储到 min 变量中。直到遍历完整个数组,max 记录的就是数组中的最大值,min 记录的就是数组中的最小值。 下面的动画,演示了找最大值的过程:  

int get_max(int* nums,int numsSize) { int max = nums[0]; for(int i = 1;i max) { max = nums[i]; } } return max; }  2)排序算法

所谓排序算法,就是先将整个数组进行排序,当排完序之后整个数组就是有序的,不管是升序还是降序都能相对的找到数组中的最值

十种排序算法都可以使用,这里采用快速排序算法(这里不太明白该算法原理的可以去查找一下快速排序算法的原理)

int partition(int* arr, int left, int right) { //设置两个下标 int index1 = left; int index2 = right - 1; int temp = 0; //设置为中间值 int pivot = arr[right]; while (1) { //index1下标向后遍历直到找到一个大于中间值的元素 while (arr[index1] < pivot) { index1++; } //同理,index2下标向前遍历直到找到小于中间值的元素 while (arr[index2] > pivot) { index2--; } if (index1 >= index2) { break; } //进行交换两个下标指向的值 else { temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp; //index1和index2都向前移动一个单位准备下次遍历 index1++; index2--; } }// //当跳出循环之后就将中间值pivot从最后一个位置调换到中间位置 temp = arr[right]; arr[right] = arr[index1]; arr[index1] = temp; return index1; } void the_quick_sort(int* arr,int left,int right) { int par; //数组中只存在一个数或是不存在数,数组将不在进行分割 if (right - left max_right) { return max_left; } else { return max_right; } }



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3