5种排序算法的Java代码
来源:互联网 发布:算法的乐趣代码 编辑:程序博客网 时间:2024/06/03 21:32
1.冒泡排序
public static void BubbleSort(long[]arr){ if (arr.length<2) return; long temp; for (int i = 0; i < arr.length-1; i++) { for (int j = arr.length-1; j >i; j--) { if (arr[j]<arr[j-1]) { temp=arr[j]; arr[j]=arr[j-1]; arr[j-1]=temp; } } } }
2.选择排序
public static void SelectSort(long[]arr){ if (arr.length<2) return; long temp=0; int k; for (int i = 0; i < arr.length-1; i++) { k=i; for (int j = i; j < arr.length; j++) { if (arr[j]<arr[k]) { k=j; } } //k is min value temp=arr[i]; arr[i]=arr[k]; arr[k]=temp; } }
3.插入排序
public static void InsertSort(long []arr){ if (arr.length<2) return; long temp=0; for (int i = 1; i < arr.length; i++) { temp=arr[i]; int j=i; while(j>0&&arr[j-1]>=temp){ arr[j]=arr[j-1]; j--; } arr[j]=temp; } }
4.希尔排序(一般的插入排序)
//希尔排序 public static void ShellSort(long []arr){ //计算间隔 int h = 1; while(h<arr.length/3)h=h*3+1; //减少间隔 while(h>0){ long tmp; for (int i = h; i < arr.length; i++) { tmp=arr[i]; int j=i; while (j>h-1&&arr[j-h]>=tmp) { arr[j]=arr[j-h]; j-=h; } //逐步移位,直到j指针指向的元素为最小为止 arr[j]=tmp; } h=(h-1)/3; } }
5.快速排序
/** * * 设置分区key,不以数组最右端为分界点 * */ public static void partition1(long []arr,int left,int right,long key){ if (arr.length<2) { return ; } int leftPtr=left-1; int rightPtr=right+1; long tmp=0; while (true) { while (leftPtr<rightPtr&&arr[++leftPtr]<key) ; while (leftPtr<rightPtr&&arr[--rightPtr]<key) ; if (leftPtr>rightPtr) { return ; }else{ tmp=arr[leftPtr]; arr[leftPtr]=arr[rightPtr]; arr[rightPtr]=tmp; } } //return leftPtr; } /** * * 设置分区key,以数组最右端为分界点 * */ public static int partition(long []arr,int left,int right,long key){ if (arr.length<2) { return -1; } int leftPtr=left-1; int rightPtr=right; long tmp=0; while (true) { while (leftPtr<rightPtr&&arr[++leftPtr]<key) ; while (leftPtr<rightPtr&&arr[--rightPtr]>key) ; if (leftPtr>=rightPtr) { break; }else{ tmp=arr[leftPtr]; arr[leftPtr]=arr[rightPtr]; arr[rightPtr]=tmp; } } tmp=arr[leftPtr]; arr[leftPtr]=arr[right]; arr[right]=tmp; return leftPtr; } //快速排序 public static void QuickSort(long []arr,int left,int right){ if (left>=right) { return; }else{ //获得切入点数据 long key=arr[right]; //获得 切入点的同时对数组进行划分 int partition=partition(arr, left, right,key ); //分别对左右两边的子数组进行递归排序 QuickSort(arr, left, partition-1); QuickSort(arr, partition+1, right); } //show(arr); //show(arr); }
阅读全文
1 0
- 5种排序算法的Java代码
- 排序算法代码--Java
- java:排序算法代码
- 几种常见排序算法的Java代码实现
- 常用的八种排序算法与Java代码实现
- Java常用的八种排序算法与代码实现
- 常用的八种排序算法与Java代码实现
- Java常用的八种排序算法与代码实现
- [Java]常用的八种排序算法与代码实现
- Java常用的八种排序算法与代码实现
- Java常用的八种排序算法与代码实现
- Java常用的八种排序算法与代码实现
- Java常用的八种排序算法与代码实现
- Java常用的八种排序算法与代码实现
- Java 常用的八种排序算法与代码实现
- Java常用的八种排序算法与代码实现
- Java常用的八种排序算法与代码实现
- Java常用的八种排序算法与代码实现
- 设计模式-11-享元模式
- Yii2 ajax 提交 view 端 和 controller端
- 一个面试题
- storm与流计算
- Sublime Text编辑器在前端中的快捷操作
- 5种排序算法的Java代码
- 杭电oj1017
- AutoCAD文档01——安装教程
- No module named keras
- Yii2 关于 Url::toRoute 和Url::to 路径 例子
- 多线程笔试面试题(1)
- two weeks vim(2)
- HDU 3522 Farming(转化为体积并来写)
- Mac安装Mongodb