基础排序算法与二分查找算法Java版本(下)
2015-11-15 00:57
459 查看
public class Sort { public static void swap(int[] temp ,int a,int b){ int t = temp[a]; temp[a] = temp[b]; temp[b] = t; } //选择排序,从无序数组中选出一个合适的数值插入至数组中 public static void selectSort(int[] array) { int min; for(int i = 0; i < array.length;i++){ //用于对比的值 min = i; //从i+1 到 数组尾部中选出一个余下数组中最小的值放入前面的有序部分中 for(int j = i + 1; j < array.length;j++){ if(array[j] < array[min]) min = j; } swap(array,i,min); } } //希尔排序,也是插入排序的一种,它是将待排序列分成若干组后, //先在小组内进行插入排序,然后逐渐减少间隔增加组数, //最终整个数组进行一次插入排序,效率很高。 public static void shellSort(int[] array) { int len = array.length; for(int gap = len; gap > 0 ; gap/=2) for(int i = gap; i < len ; i++) for(int j = i - gap; j >= 0;j-=gap){ if(array[j] > array[j+gap]) swap(array,j,j+gap); } } //堆排序,是插入排序的一种,先要建立起最小堆,然后在对堆进行排序 public static void MinHeapFix(int[] array,int i,int len){ //从i节点开始 int k,temp; temp = array[i]; //父节点 k = i*2+1; //i的左子节点 while(k < len){ //找出两个子节点中小的那个 if(k+1 < len && array[k]>array[k+1]) k++; //若最小的自节点大于根节点,那么符合最小堆规则 if(array[k] >= temp) break; //若不符合最小堆规则,把较小的节点往上移动,并对余下 //的堆进行判断 array[i] = array[k]; i = k; k=k*2+1; } array[i] = temp; } //建立最小堆 public static void MakeMinHeap(int[] array,int len){ //i节点的父节点的下标为(i-1)/2 for(int i = len/2 - 1; i>=0;i--) MinHeapFix(array,i,len); } public static void HeapSort(int[] array,int len){ for(int i = len-1;i >=1;i--){ //和插入排序一样,每次将余下的树中最小数放到最后, //余下的数建立一个最小堆 swap(array,0,i); MinHeapFix(array,0,i); } } //二分查找法 public static int binarySearch(int[] array,int target){ int start = 0; int end = array.length; int mid = 0; while(end > start){ mid = start+((end-start) >> 1); if(array[mid] > target) end = mid-1; else if(array[mid] < target) start = mid +1; else return mid; } return -1; } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- JavaScript演示排序算法
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树