排序和查找算法(冒泡、快速、二分法)
2017-02-23 16:16
148 查看
冒泡排序
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束
public void exeBubbleSort(int[] arr){ //循环躺数 for(int i=0;i<arr.length;i++){ //从左往右循环比较相邻元素大小,大的换到右边 for(int j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } }
快速排序
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。public void exeQuickSort(int arr[],int low,int high){ //左侧起始下标 int l=low; //右侧起始下标 int h=high; //中间值 int povit=arr[low]; //一趟循环,指导左右侧下标相等 while(l<h) { //从右向左,当前值不小于中间值时,h递减,直到当前值小于中间值或l==h while(l<h&&arr[h]>=povit) h--; //如果当前值小于中间值,交换左右侧数据 if(l<h){ int temp=arr[h]; arr[h]=arr[l]; arr[l]=temp; l++; } //从左向右,当前值不大于中间值时,l递增,直到当前值大于中间值或l==h while(l<h&&arr[l]<=povit) l++; //如果当前值大于中间值,交换左右侧数据 if(l<h){ int temp 4000 =arr[h]; arr[h]=arr[l]; arr[l]=temp; h--; } } for(int a:arr){ System.out.print(a); } System.out.println(); System.out.print("l="+(l+1)+"h="+(h+1)+"povit="+povit+"\n"); //如果此次循环左侧有交换(即此次中间值不是最小值),将中间值以左作为新的排序区间 if(l>low)exeQuickSort(arr,low,l-1); //如果此次循环右侧有交换(即此次中间值不是最大值),将中间值以右作为新的排序区间 if(h<high)exeQuickSort(arr,l+1,high); }
二分法查找
//递归实现二分法查找 int BinarySearch(int[] a,int key,int low,int high) { if(low>high||key<a[low]||key>a[high]) //越界处理 { return -1; } int middle=(low+high)/2; if(key==a[middle]) { return middle; } if(middle==low||middle==high) { if(key==a[low]) { return low; } if(key==a[high]) { return high; } else { return -1; } } if(key<a[middle]) { return BinarySearch(a,key,low,middle); } if(key>a[middle]) { return BinarySearch(a,key,middle,high); } return -1; } //循环实现二分法查找 int BinarySearchByCircle(int * a,int key,int high) { int low=0; int middle; while(high>=low) { middle=(high+low)/2; if(key==a[middle]) { return middle; } if(key<a[middle]) { high=middle-1; } if(key>a[middle]) { low=middle+1; } } return -1; }
相关文章推荐
- 数据结构各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- 冒泡排序、选择排序、快速排序、二分法查找
- java实现冒泡,选择,插入,快速排序
- 冒泡、简单选择、快速插入排序回顾(待续)
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 链表之排序(插入、选择、归并、快速、冒泡)
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 数据结构(冒泡、快速、插入等排序)PHP && JAVA --面试技巧
- java实现七大排序(插入,冒泡,选择,快速,堆,希尔,归并)
- 排序------快速,插入,选择,冒泡
- 二分法查找和快速排序
- C# 快速(二分法)排序
- 冒泡、快速、选择、插入、排序
- 浅谈数据结构-交换排序(冒泡、快速)
- 冒泡和Arrays类提供的快速排序比较时间
- 数据结构排序算法总结包括选择、插入、希尔、快速、冒泡等排序方法
- Java算法之排序(快速,冒泡,归并,选择)
- java:四种int【】数据排序,冒泡,插入,选择,快速排序
- 冒泡,插入,折半插入,希尔,快速,简单选择排序的源代码总结
- 从零开始_学_数据结构(六)——排序(冒泡、插入、希尔、简单选择、归并、快速)