简单排序Java实现(三):希尔排序,堆排序
来源:互联网 发布:学生护手霜推荐 知乎 编辑:程序博客网 时间:2024/05/22 06:14
希尔排序平均时间复杂度:O(nlogn),最好时间复杂度:O(n)
堆排序的最好和平均时间复杂度都为:O(nlogn);
public class sortTest {public static void main(String[] args) {// TODO Auto-generated method stubint i =0;int [] a={5,4,3,8,7};System.out.println("================归并排序===========================");int len =a.length;MergeSort(a,0,len-1);printA(a);System.out.println("================快速排序===========================");quickSort(a);printA(a);System.out.println("================希尔排序===========================");shellSort(a);printA(a);System.out.println("================小顶堆排序===========================");myMinHeapSort(a);printA(a);}private static void myMinHeapSort(int[] a) {// TODO Auto-generated method stubint len=a.length;for (int i = len/2; i>=0; i--) {adjustMinHeap(a,i,len-1);}for(int i=len-1;i>=0;i--){int tmp=a[0];a[0]=a[i];a[i]=tmp;adjustMinHeap(a, 0, i-1);}}private static void adjustMinHeap(int[] a, int i, int len) {// TODO Auto-generated method stubint tmp;int child=0;for(tmp=a[i];2*i+1<=len;i=child){child=2*i+1;if(child<len && a[child]>a[child+1]){child++;}if(a[child]<tmp){a[i]=a[child];}else{break;}}a[i]=tmp;}private static void printA(int[] a) {for (int j = 0; j < a.length; j++) {System.out.print(a[j]+" ");}System.out.println();}private static void shellSort(int[] a) {// TODO Auto-generated method stubint len=a.length;int i,j,h,tmp;for(h=len/2;h>0;h=h/2){for(i=h;i<len;i++){tmp=a[i];for(j=i-h;j>=0;j-=h){if(tmp<a[j]){a[j+h]=a[j];}else{break;}}a[j+h]=tmp;}}}//快速排序private static void quickSort(int[] a) {// TODO Auto-generated method stubsort(a,0,a.length-1);}private static void sort(int[] a, int low, int high) {// TODO Auto-generated method stubint i,j;int index;if(low>=high){return;}i=low;j=high;index=a[i];while(i<j){while(i<j && a[j]>=index){j--;}if(i<j){a[i++]=a[j];}while(i<j && a[i]<index){i++;}if(i<j){a[j--]=a[i];}}a[i]=index;sort(a,low,i-1);sort(a,i+1,high);}//归并排序private static void MergeSort(int[] a, int p, int r) {// TODO Auto-generated method stubif(p<r){int q=(p+r)/2;MergeSort(a,p,q);MergeSort(a,q+1,r);Merge(a,p,q,r);}}private static void Merge(int[] a, int p, int q, int r) {// TODO Auto-generated method stubint i,j,k,n1,n2;n1=q-p+1;n2=r-q;int[] L=new int[n1];int[] R=new int[n2];for (i = 0,k=p; i <n1; i++,k++) {L[i]=a[k];}for (i = 0,k=q+1; i <n2; i++,k++) {R[i]=a[k];}for(i=0,j=0,k=p;i<n1 && j<n2;k++){if(L[i]<R[j]){a[k]=L[i];i++;}else{a[k]=R[j];j++;}}if(i<n1){for(j=i;j<n1;j++,k++){a[k]=L[j];}}if(j<n2){for(i=j;i<n2;i++,k++){a[k]=R[i];}}}}
阅读全文
1 0
- 简单排序Java实现(三):希尔排序,堆排序
- java实现七种排序 (插入排序, 希尔排序, 插入排序, 快速排序, 简单选择排序, 堆排序, 归并排序)
- Java基础篇之----排序(快速排序、冒泡排序、堆排序、简单选择排序、 希尔排序、直接插入排序)
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- java实现简单排序算法:希尔排序
- 数据结构--排序系列(插入排序,希尔排序,堆排序)Java代码实现
- 快速排序、堆排序、希尔排序实现
- Java之8中排序(三)---简单选择排序,堆排序(java实现)
- JAVA实现排序算法(三):希尔排序
- 程序员必知的8大排序(三)-------简单选择排序,堆排序(java实现)
- Java实现常见排序--希尔排序、快排序、堆排序、归并排序等Java实现代码
- Java高级排序(希尔排序,快速排序,堆排序,归并排序,桶排序)
- 希尔排序简单实现
- java实现:快速排序,基数排序,计数排序,归并排序,堆排序,希尔排序
- C++实现直接插入排序,折半插入排序,希尔排序,冒泡排序,简单选择排序,快速排序,堆排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- java实现简单排序算法:堆排序
- 排序(希尔排序,堆排序,归并排序,快速排序)
- JSONObject与JSONArray的使用
- 软件测试笔试题
- 【JZOJ5341】【NOIP2017模拟9.2A组】密州盛宴
- LeetCode-Palindrome Number-Java
- JavaScript中click和keypress事件绑定的顺序
- 简单排序Java实现(三):希尔排序,堆排序
- 分解质因数
- html元素水平居中的几种方法
- nodejs的路由控制制作
- HYSBZ2243 染色【树链剖分】
- MapReduce之shuffle
- WOJ1099-flirly
- java的String类
- 6-3 使用函数输出指定范围内的完数