JAVA冒泡排序,归并排序,二分查找
来源:互联网 发布:bae 数据库 编辑:程序博客网 时间:2024/06/05 03:55
一、基本理解
冒泡排序基本思想:两两比较相邻记录的关键码,如果反序则交换,知道没有反序的记录为止。
归并排序基本思想:将若干个有序序列进行两两归并,直至所有待排序序列都在一个有序序列为止。前提:数组有序。
二分查找(折半查找)基本思想:对一个队列数组设置头start、尾end、中间索引mid=(start+end)/2,每次将待查找的值num与中间索引对应的值进行比较,分为三种情况:①查找的值小于中间索引对应的值;②:查找的值大于中间索引对应的值;③:查找的值等于中间索引对应的值。三种情况分别处理,结束条件为:start>end。
二、代码详解
class SortDemo{public static void main(String[] args){int[] arr=new int[100];fuZhi(arr); bobbleSort(arr); //冒泡排序 mergeSort(arr); //归并排序print(arr); //打印数组System.out.println();int index=binarySearch(arr,10); //二分查找数值if(index!=-1){System.out.println("找到了——索引为"+index);}else{System.out.println("没有找到索引!");}//long last=System.currentTimeMillis();//System.out.println();//System.out.println("所用时间为:"+(last-pre));}// 二分查找public static int binarySearch(int[] arr,int num){int index=-1;int start=0;int end=arr.length-1;int mid=(start+end)/2; //先初始化变量while(start<end){if(num<arr[mid]){end=mid-1;}else if(num>arr[mid]){start=mid+1;}else{index=mid;break;}mid=(start+end)/2;}return index;}//为归并排序准备一个临时数组public static void mergeSort(int[] arr){int[] temp=new int[arr.length];sort(arr,0,arr.length-1,temp);}//归并public static void sort(int[] arr,int left,int right,int[] temp){if(left<right){int mid=(left+right)/2;sort(arr,left,mid,temp); //左边归并排序sort(arr,mid+1,right,temp); //右边归并排序merge(arr,left,mid,right,temp); //将两个有序子数组合并操作}}// 归并排序public static void merge(int[] arr,int left,int mid,int right,int[] temp){int i=left;int j=mid+1;int t=0; //临时数组索引while(i<=mid&&j<=right){if(arr[i]<=arr[j]){temp[t++]=arr[i++];}else{temp[t++]=arr[j++];}}while(i<=mid){temp[t++]=arr[i++];}while(j<=right){temp[t++]=arr[j++];} t=0;while(left<=right){arr[left++]=temp[t++];}}// 赋值public static void fuZhi(int[] arr){for(int i=0;i<arr.length;i++){arr[i]=(int)(Math.random()*arr.length);}}// 打印数组public static void print(int[] arr){for(int i=0;i<arr.length;i++){if(i%10==0){System.out.println();}System.out.print(arr[i]+" ");}}//冒泡排序public static void bobbleSort(int[] arr){for(int i=0;i<arr.length;i++){for(int j=0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){swap(arr,j,j+1);}}}}// 交换public static void swap(int[] arr,int from,int to){int temp=arr[from];arr[from]=arr[to];arr[to]=temp;}}三、时空复杂度
冒泡排序:时间复杂度为O(n^2);空间复杂度为O(1)。
归并排序:时间复杂度为O(nlog2n);空间复杂度为O(n)—为其开辟了一个和原数组同等长度的数组。
阅读全文
0 0
- JAVA冒泡排序,归并排序,二分查找
- java 冒泡排序二分查找
- Java 冒泡排序,选择排序,二分查找
- 归并排序 二分查找
- 冒泡排序+二分查找
- 冒泡排序、二分查找
- JAVA实现冒泡排序和二分查找
- JAVA实现冒泡排序和二分查找
- Java--冒泡、选择排序,二分查找
- Java排序[理解]+优化冒泡+二分查找
- Java中冒泡排序和二分查找
- Java-冒泡,选择排序,二分查找算法
- 简单Java冒泡排序 二分查找 快速排序
- java实现的选择排序、冒泡排序、二分查找
- java的 最大值 选择排序 冒泡排序 二分查找
- 冒泡排序和二分查找
- 二分查找与冒泡排序
- 冒泡排序和二分查找
- select函数详解及其在I|O复用模型中的应用
- 1048. 数字加密(20)
- 计算机进制转换
- 基于vue-cli及express模拟Ajax获取服务器数据
- Spring学习之Bean的装配
- JAVA冒泡排序,归并排序,二分查找
- Vue和VueResource介绍
- codeforces 590D
- 3分钟把区块链的技术与应用彻底讲清楚
- ORB_SLAM2学习记录1-ORB_SLAM2的安装与运行
- 单链表常见面试题(二)
- 暑期计划
- HTML基础知识总结2
- 数组的蛇形打印