什么是冒泡排序?
冒泡排序就是在一个数组中有存在不同顺序的元素,需要将其按照升序进行排列的一种排列顺序,是最基本的一种数组的排列,排列方式类似于吐泡泡从小到大。
冒泡排序的依据?
按照数组的下标顺序依次两两比较元素的大小,小的排到前面,大的一直向后移动,重复的两两交换在第一次就可以把最大的元素排到数组的尾部,知道整个数组所有元素比较一轮结束。
冒泡排序的实现思路?
1.首先把需要比较的数组拿过来
2.每一个位置都需要向后比较,所以需要比较数组长度-1轮,而每一个元素又要两两相比,每一个元素也需要比较一轮,所以需要两个循环帮我们完成。
3.数据的交换,在当前位置x和后一个位置x+1的对应元素进行等值比较如果大就根据第三变量进行赋值交换,如果小则保持原位。
具体代码实现:
这个是基础算法,比较简单容易实现,还有一个优化算法如下:
画图分析:
也就是说每一次比完,都会找到一个最大的数字,后面的每一轮比较都不需要再比所有数字,而是比上一次少一个,这是第一点,第二点是如果本来这个数组就是有序的那么就不需要比较了。定义flag默认有序。
数组我们排序好了,那么如何获取数组里面我们想要的元素的位置那?现在我们来用二分法来快速查找一下10的位置在哪?
什么是二分法以及实现思路?
二分法检索又称折半检索,二分法检索的基本思想是设数组中的元素从小到大有序地存放在数组(array)中,首先将给定值key与数组中间位置上元素的关键码(key)比较,如果相等,则检索成功;否则,若key小,则在数组前半部分中继续进行二分法检索;若key大,则在数组后半部分中继续进行二分法检索。这样,经过一次比较就缩小一半的检索区间,如此进行下去,直到检索成功或检索失败。
从图我们可以看出来,二分法查找的前提是数组必须有序,然后通过折半和当前元素对比大小判断范围,如果大于中间数则继续折半中间数之后区域进行判断,反之相同,直到找到对应元素,找到返回索引,找不到返回-1。
代码如下:
以上就是对数组的排序和查找两项最基本的也是必须要会手动敲出来的。