经典排序算法(希尔排序,归并排序,快速排序,插入排序)
2014-09-10 11:08
253 查看
public static void main(String[] args){ int[]a={13,50,6,9,8,7,12,15,100,4}; //insertSort(a); //shellSort(a); //quickSort1(a,0,a.length-1); int []temp=new int[a.length]; mergeSort(a,0,a.length-1,temp); for(int cc:a) { System.out.print(cc+" "); } } public static void insertSort(int[] a){ int key=0; int i=0; for(int j=2;j<a.length;j++){ key=a[j]; i=j-1; while(i>=0&&a[i]>key){ a[i+1]=a[i]; i--; } a[i+1]=key; } } public static void shellSort(int[] a){ int size=a.length; for(int gap=size/2;gap>=1;gap/=2){ for(int i=gap;i<size;i++){ int temp=a[i]; int k; for(k=i-gap;k>=0&&a[k]>temp;k-=gap){ a[k+gap]=a[k]; } a[k+gap]=temp; } } } public static void quickSort1(int[] a,int L,int R){ if(L<R){ int i=L,j=R,key=a[L]; while(i<j){ while(i<j&&a[j]>=key){ j--; } if(i<j){ a[i++]=a[j]; } while(i<j&&a[i]<key){ i++; } if(i<j){ a[j--]=a[i]; } } a[i]=key; quickSort1(a,L,i-1); quickSort1(a,i+1,R); } } //合并数组 public static void mergeSort(int a[],int first,int mid,int end,int[] temp){ int i=first,j=mid+1; int m=mid,n=end; int k=0; while(i<=m&&j<=n){ if(a[i]<=a[j]){ temp[k++]=a[i++]; }else{ temp[k++]=a[j++]; //count+=m-i+1; 还可以统计逆序对,n*lgn时间复杂度 } } while(i<=m){ temp[k++]=a[i++]; } while(j<=n){ temp[k++]=a[j++]; } for(i=0;i<k;i++){ a[first+i]=temp[i]; } } public static void mergeSort(int[] a,int first,int last,int[] temp){ if(first<last){ int mid=(first+last)/2; mergeSort(a,first,mid,temp); mergeSort(a,mid+1,last,temp); mergeSort(a,first,mid,last,temp); } }
相关文章推荐
- 排序方法了解一下(冒泡排序、选择排序、堆排序、插入排序、希尔排序、归并排序、快速排序、基数排序)
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 面试珠玑 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 直通BAT-排序1(冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序)
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- 经典排序算法设计与分析(插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序、归并排序)
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序六大排序大总结
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 基本的排序算法:冒泡排序、插入排序、希尔排序、选择排序、归并排序、快速排序、堆排序
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
- 【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序
- 面试珠玑 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 插入排序,希尔排序,堆排序,归并排序,快速排序Java实现