提起排序,记忆最深刻的就是冒泡法排序,因为这是程序员入门必学的第一个排序算法。 但是冒泡法需要不断地遍历数组,不断地遍历数组,需要消耗更多的时间。 相对于冒泡法,二分法排序的效率相对的更高一些。
PS:什么是递归、二分查找、归并排序。...归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。...下面是简单例子 1、二分查找法 思路 二分法就是把一个数组折半查找,再折半直到找到数据位置,或者无数据位置。...data, midIndex + 1, endIndex); } else { return midIndex; } } 效率 普通二分查找法和递归二分查找都是...3:归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
二分查找法需要数组是一个有序的数组。 <?...php function binarySearch($num, $arr) { $start = 0; $end = count($arr); $mid = floor(($start
冒泡排序 将一组无规律的数据按照一定的规律排列下来 冒泡排序的原理: 这是将一组无规律的数据从大到小排列 ?...二分法 在数组里查找数据,找到数据所在的索引 // 在数组里面查找数据,找到数据所在位置的索引 var arr = new Array(1,2,3,4,5,6,7,8,9,10);...这三种方法都可以找到数据的索引,这里着重看一下二分法 二分法查找的前提;数组必须为有序 思路:找到数组的中间数zjx和要查找的数a,若a<zjx,则要查找的数在中间数zjx的左边,就把数组二分,只在左边查找...二分法对于数据特别多的情况能极大的节约效率。...在上面的二分法中: 首先定义最大值 maxx,最小值 minx 中间值 zjx 也可以再循环中定义 我们不能确定循环的次数,所以这里使用 while 循环 首先找出中间值,中间值等于最大值和最小值的和除以
快速排序法 function sort(arr){ if(arr.length<=1){ return arr } var index=Math.floor(arr.length...sort(left).concat([arrIndex]).concat(sort(right)); } var arr=[7,8,9,2,5,3,6,1,3,7]; sort(arr); 冒泡排序法
// 在找到的位置插入 37 array[left] = temp; 38 printArray("第" + to_string(++time) + "次循环排序结果...: 8 21 2 18 0 9 27 12 5 24 第2次循环排序结果: 2 8 21 18 0 9 27 12 5 24 第3次循环排序结果: 2 8 18 21 0 9 27 12 5 24 第4...次循环排序结果: 0 2 8 18 21 9 27 12 5 24 第5次循环排序结果: 0 2 8 9 18 21 27 12 5 24 第6次循环排序结果: 0 2 8 9 18 21 27 12...5 24 第7次循环排序结果: 0 2 8 9 12 18 21 27 5 24 第8次循环排序结果: 0 2 5 8 9 12 18 21 27 24 第9次循环排序结果: 0 2 5 8 9 12...18 21 24 27 二分查找就是把插入位置的寻找过程由原来的顺序查找改成了二分查找,效率很高。
1.冒泡排序: 思路分析: 数组中 第一个空间值和第二个空间值比较,把较大的值存在第二个空间中。第二个空间值和第三个空间值比较,把较大的值存在第三个空间中。依次类推,把最大值存放在最后一个空间中。...} } } System.out.println(Arrays.toString(arr)); } } 2.选择排序...} } 4.二分查找 思路分析: 找到中间角标对应的值。 让该元素和要找的值进行比较。 如果要找的数字大了,缩小范围。要找的范围是:中间角标+1 到 尾角标。...if(max<min){// 遍历结束 return -1; } mid = (min+max)>>1;// 再次二分
冒泡排序法 是数组等线性排列的数字从大到小或从小到大排序。 以从小到大排序为例。...---- 插入排序法 插入排序算法是把一个数插入一个已经排序好的数组中。...对数组使用插入排序法 数组 int [] array = [11, 39, 35, 30, 7, 36, 22, 13, 1, 38, 26, 18, 12, 5, 45, 32, 6, 21, 42,...冒泡排序法与插入排序法比较 冒泡排序是从一端开始,比较大小后存到另一端。每次都是从前开始,把最大或最小的结果放到最后。 插入排序始终是从前面开始,把下一个元素存到前面,不用比较最大最小的结果。...选择排序法 每次从后面找到最小或最大的数,进行位移排序。
二分法查找 猜数字游戏 0-1000猜数字游戏: 普通查找:100,99,98,…,1,需要100步 二分法查找:100--->50--->25--->13--->7--->4--->2--->...普通查找n步 attention:二分法查找仅对有序列表有用 思想 折半查找,比较次数少,速度快,只能作用于有序数组和顺序表,当查找范围内只有一个数据的时候,结束查找。...最优时间复杂度:O(1) 最坏时间复杂度:O(logn) 运行时间 运行时间是通过大o()运行时间来表示 二分查找的速度比线性查找快的多,元素越多,快的越多 算法运行时间是从其增速的角度来度量的 ?...遍历循环每个元素和目标元素进行比较 if alist[i] == obj: return i return "{} not in the alist".format(obj) 选择排序...smallest_index = i return smallest_index # 返回索引值,pop方法需要 def selectSort(arr): # 选择排序
二分查找算法的前置条件是,一个已经排序好的序列(在本篇文章中为了说明问题的方便,假设这个序列是升序排列的),这样在查找所要查找的元素时,首先与序列中间的元素进行比较,如果大于这个元素,就在当前序列的后半部分继续查找...就在当前序列的前半部分继续查找,直到找到相同的元素,或者所查找的序列范围为空为止. int BinSearch(SeqList * R, int n , KeyType K ) { //在有序表R[0..n-1]中进行二分查找...> 2.wiki上关于二分查找的说明:http://en.wikipedia.org/wiki/Binary_search int BinSearch1(int r[ ], int n,
花时间研究了一下两种不同的排序算法,下面给出介绍。 1 . 冒泡排序算法 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。...直接选择排序法 选择排序是一种简单直观的排序算法。 其基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。...#include // 直接选择排序法 int a[10]; void sort(int a[],int n){ int index; for(int i=1;i<...另外想要更快的去解决排序问题的话,可以下功夫去研究一下库里面的 qsort函数,也非常的实用!
二分查找法 最近学校事比较多,自己好久没写过JAVA了,趁着这次开《算法图解》,可以好好的把JAVA基础再过一遍。 开始之前 毕竟是《算法图解》的笔记,所以正好把算法是什么也解释一下吧。...二分查找 二分查找是一种算法,其输入是一个有序的元素列表。...如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。...—《算法图解》 有序:是为了在查找时,让数据有序可循,以便于直知道二分点的数据与要查找的数据之间的关系。 二分查找的时间复杂度是O(log n)。...low = mid + 1; }else if(n < arr[mid] ) { //若二分点的数字大于目标数
问题描述: 给定一个数组(或者输入一个数组),分别运用选择排序法和冒泡排序法将所要的结果输出。...程序分析: 选择排序 1>.对于选择排序,首先理解排序的思想。...2>.在掌握了程序的基本思想之后,再进行排序。找到最大的下标后赋给k。...冒泡排序 1>.对于冒泡排序,主要采用的是相邻数两两进行比较的思想。如果后一个比前一个大(小),则将其调换位置,直至所有的数都比较完。...最后,用一个循环将排序完成后的数全部输出。
, 22 1月 2021 作者 847954981@qq.com 我的编程之路, 算法学习 递归排序法—-分治排序 原理: 利用二分法将一组数组分成n多段只有一个元素的数组,再将数组两两组合排序 前提
使用二分查找,初始化两个变量low=0,hight=nums.length-1 1、mid=(low+high)/2 2、假如nums[mid]等于target,返回下标mid 3、当nums[mid]
快速排序法借用书上和百度的解释 在待排序的n个元素中取一个元素Key(通常取第一个元素),以元素Key作为分割标准,把所有小于Key元素的数据元素都移到K前面,把所有大于K元素的数据元素都移到K后面。...这样,以K为分界线,把线性表分割为两个子表,这称为一趟排序。然后,对K前后的两个子表分别重复上述过程。继续下去,直到分割的子表的长度为1为止,这时,线性表已经是排好序的了。...快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1; 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]; 3)从j开始向前搜索,即由后开始向前搜索(j--)...实例 #include using namespace std; void sort(int s[],int left,int right)//进行排序 { if(left<...right)//判断取的key两边的数组下标是否符合排序规则 { int i=left,j=right; int key=s[left]; while
在看完快速排序法之后,又对希尔排序法展开攻势,看了好长时间没懂,之后看个大概开始去写代码,虽然写出来了但是不够简洁,比网上的例子多了个for循环,不知道叫不叫希尔排序法。...进行判断长度是否大于1 { increment=increment/3;// for(i=start+increment;i<=end;i++)//参考插入法可理解
选择排序法 分析 假设已经给定了一个无序数组,现在需要将其按照一定顺序排好。现在我们使用选择排序法,每次从数组中选出一个最大的元素并将其与数组最后一个元素交换位置,使数组最后一个元素变为最大的。...随着排序的进行,每次需要检查的元素数在逐渐减少,最后一次需要检查的元素都只有一个。既然如此,运行时间怎么还是O(*n*2)呢?这个问题问得好,这与大O表示法中的常数相关。...但大O表示法省略诸如1/2这样的常数(有关这方面的完整讨论,请参阅第4章),因此简单地写作O(n × n)或O(*n*2)。
/** * 快速排序实现 * Created by John Kwok on 2018/2/2. */ import java.util.Arrays; public class QuickSort...{ /** * 在待排序索引范围内随机选取一个数值,将小于等于该索引处值的数字放置在其左侧,大于的放在其右侧。...; } } } return smallNum; } /** * 使用递归法进行快速排序.../ swap(array,0,1); quickSortFun(array,0,array.length-1); System.out.println("排序结果
领取专属 10元无门槛券
手把手带您无忧上云