算法总结
来源:互联网 发布:java main函数 多线程 编辑:程序博客网 时间:2024/05/29 04:32
package sort;/** * 排序算法实现 * @author tangxing * */public class Sort {/** * 冒泡排序 * @param a */public static void bubbleSort(int[] a){for(int i=0;i<a.length-1;i++){for(int j=0;j<a.length-i-1;j++){if(a[j]>a[j+1]){int temp = a[j+1];a[j+1] = a[j];a[j] = temp;}}}}/** * 快速排序, * 思想:分治法,选取一个基准元素,一趟排序之后分为两组,一组中的所有元素比基准元素小,另一组中的所有元素比基准元素大,然后用递归将两组中的元素继续排序 * @param a * @param low * @param high */public static void quickSort(int[] a,int low,int high){if(low >= high){return;}int index = partition(a,low,high);quickSort(a,low,index-1);quickSort(a,index+1,high);}/** * 快排的partition函数 * @param a * @param begin * @param end * @return */public static int partition(int[] a,int begin,int end){int base = a[begin];//取数组中第一位为基准元素int low = begin;int high = end;while(low < high){//从右向左开始扫描while(low<high && base<a[high]){high--;}a[low] = a[high];//从左向右开始扫描while(low<high && base>a[low]){low++;}a[high] = a[low];}a[low] = base;//将基准元素放到中间位置return low;//返回中间位置的索引}/** * 归并算法 * @param a * @param first * @param last * @param tmp */ public static void mergeSort(int a[],int first,int last,int tmp[]){ if(first<last){ int mid=(first+last)/2; mergeSort(a, first, mid, tmp);//左边有序 mergeSort(a, mid+1, last, tmp);//右边有序 merge(a, first, mid, last, tmp);//合并 } } //将有序数组a[first..mid] a[mid+1,last]合并 public static void merge(int a[],int first,int mid,int last,int tmp[]){ int i=first;//前一个数组的开始下标 int j=mid+1;//后一个数组的开始下标 int m=mid;//前一个数组的最后下标 int n=last;//后一个数组的最后下标 int k=0;//存放临时数组到tmp while(i<=m&&j<=n){ if(a[i]<=a[j]){ tmp[k++]=a[i]; i++; }else { tmp[k++]=a[j]; j++; } } while(i<=m){ tmp[k++]=a[i++]; } while(j<=n){ tmp[k++]=a[j++]; } //复制tmp到a数组 for(i=0;i<k;i++){ a[first+i]=tmp[i]; } }public static void main(String[] args) {//冒泡排序int[] a = {5,9,8,1,5,7,3,2,6};bubbleSort(a);for(int i=0;i<a.length;i++){System.out.print(a[i]+" ");}System.out.println("\n--------------------------");//快速排序int[] b = {5,9,8,1,7,3,2,6};quickSort(b,0,b.length-1);for(int i=0;i<b.length;i++){System.out.print(b[i]+" ");}System.out.println("\n--------------------------");//归并排序int[] c = {5,9,8,1,5,7,3,2,6};int tmp[]=new int[c.length]; mergeSort(c, 0, c.length-1, tmp);for(int i=0;i<c.length;i++){System.out.print(c[i]+" ");}}}
0 0
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 算法总结
- 一维、二维正态分布概率密度曲线的绘制
- Gpio模拟i2c总线对24c02进行读写
- IOS开发学习过程问题点记录
- Java_正则表达式
- Linux并发服务器编程之IO多路复用
- 算法总结
- eclipse 关闭控制台 自动弹出
- Sql Server 恢复模式
- 用几十行代码实现python中英文分词
- 详细设计-程序结构图
- ios安卓SDK在ipv4和ipv6下自动匹配当前网络
- 数据挖掘——多科学
- 提示小插件
- 史上最全最强SpringMVC详细示例实战教程