排序----冒泡,选择,插入,二分查找
来源:互联网 发布:淘宝产品摄影班 编辑:程序博客网 时间:2024/06/06 01:36
1.冒泡排序(两两比较元素进行交换,这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名)
{array[0]同arrat[1]比较,若array[0]>array[1],两者换位
array[1]同array[2]比较,若array[1]>array[2],两个换位
。
。
array[length-2]同array[length-1]比较,若array[length-2]>array[length-1],两个换位},
{array[1]同arrat[2]比较,若array[1]>array[2],两者换位
array[2]同array[3]比较,若array[2]>array[3],两个换位
。
。
array[length-3]同array[length-2]比较,若array[length-3]>array[length-2],两个换位},
。。
/*** 冒泡增序算法* @param array*/public static void bubblingSort(int[] array){for(int i=0;i<array.length;i++){for(int j=0;j<array.length-i-1;j++){if(array[j]>array[j+1]){swap(array,j,j+1);}}}}private static void swap(int[] array,int x,int y){int temp = array[x];array[x] = array[y];array[y] = temp;}时间复杂度:O(N²),进行了(n-1)*(n-2)....=n*(n-1)/2次比较和约比较次数一半的交换次数(均况下),那么根据大O表示法时间复杂度为O(N^2)
2.选择排序(每次选出当下索引应放的值)
{array[0]同arrat[1]比较,若array[0]>array[1],两者换位
array[0]同array[2]比较,若array[0]>array[2],两个换位
。
。
array[0]同array[length-1]比较,若array[0]>array[length-1],两个换位},确定array[0]的值,即确定数组最小值并放到索引为0的位置
{array[1]同arrat[2]比较,若array[1]>array[2],两者换位
array[1]同array[3]比较,若array[1]>array[3],两个换位
。
。
array[1]同array[length-1]比较,若array[1]>array[length-1],两个换位},确定array[1]的值,即确定数组最小值并放到索引为1的位置
。
。
/*** 选择排序增序* @param array*/public static void selectSort(int [] array){for(int i=0;i<array.length;i++){int index = i;for(int j=i+1;j<array.length;j++){if(array[j] < array[index]){index = j;}}if(i != index) swap(i,index,array);display(array);System.out.println();}}public static void swap(int a,int b,int array[]){int temp = array[a];array[a] = array[b];array[b] = temp;}时间复杂度:O(N^2),与冒泡排序相比减少了数组交换的次数
3.插入排序(插入排序的思想是数组是部分有序的,然后将无序的部分循环插入到已有序的序列中)
/*** 插入排序升序* @param array*/public static void insertSort(int [] array){for(int out=1;out<array.length;out++){int temp = array[out];//被标记的值或者说是当前需要插入的值int in = out;//如果轮循值大于被标记值则往后移while( in > 0 && temp < array[in - 1]){array[in] = array[in - 1]; in -- ;}//将被标记值插入最终移出的空位置array[in] = temp;}}
时间复杂度:插入排序对随即顺序的序列的时间复杂度也为O(N^2),但是对于基本有序的序列进行排序时间复杂度为O(N)
4.数组查找,折半/二分法查找(前提要求数据序列呈现线性结构,即必须是经过排序的)
public class ArrayDemo{ public static void main(String[] args) { int[] arr = new int[]{2,5,8,10,16,22,24,27,30}; int index = halfSearch(arr,24); System.out.println(index); } /** *@ author Soul_Fighter *@ 功 能 折半查找 *@ param array *@ param key *@ return int */ /* 思路:折半查找 1、定义三个角标变量,最大角标max,最小角标min,中间角标mid。 2、定义一个循环,因为不确定第一次就能得出结果。这里用while循环比较好,因为只需判断一个条件arr[mid]是否等于key的值。即:arr[mid] != key。 3、然后判断arr[mid]的值和key的值之间的关系。如果arr[mid]>key,则max = mid - 1;如果arr[mid] < key,则min = mid +1。中间值重新去值mid = (max+min)/2。 4、因为min不能大于max的值,所以还要加一个判断。如果min<max程序继续,否则返回-1。 */ public static int halfSearch(int[] arr,int key) { int max,min,mid; max = arr.length - 1; min = 0; mid = (max+min)/2; while(arr[mid] != key) { if(arr[mid] > key) max = mid - 1; else if(arr[mid] < key) min = mid +1; if(min > max) return -1; mid = (max+min)/2; } return mid; }}
- 插入,冒泡,选择,快速排序,二分查找
- 排序----冒泡,选择,插入,二分查找
- 冒泡排序,选择排序,直接插入排序,二分查找排序
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- Java冒泡,快速,插入,选择排序^_^+二分算法查找
- 冒泡 选择 插入排序 二分查找 代码备忘
- 三种数组排序算法(冒泡排序、选择排序、插入排序、二分查找法)
- 第九讲 数组排序算法:冒泡排序、选择排序、插入排序及二分查找技术
- 冒泡排序,插入排序,二分查找
- Day20、冒泡、快速、选择、插入、二分查找
- 冒泡排序、选择排序、二分查找法
- 选择排序 冒泡排序 二分查找
- Java 冒泡排序,选择排序,二分查找
- 冒泡排序,选择排序,二分查找小结
- 多线程之策略模式
- Ajax和数据库实现三级联动
- STM8L使用ADC内部参考电压通道测量VDD电压
- 编写优质嵌入式C程序
- 开源协议的区别
- 排序----冒泡,选择,插入,二分查找
- dilated convolution
- mysql(5.6)分区(四)分区和锁定
- CSS+DIV定位分析
- bzoj 1609: [Usaco2008 Feb]Eating Together麻烦的聚餐(DP)
- 你必须知道的261个Java语言问题笔记-Java线程和序列化
- 记录替换django的user模型出现的异常InconsistentMigrationHistory
- Redis哈希
- Thinkphp 调试->调试模式