java实现:快速排序,基数排序,计数排序,归并排序,堆排序,希尔排序
2017-03-10 13:39
696 查看
import java.util.ArrayList; import java.util.List; public class Suanfa { static int [] array={12,122,4,23,45,333,2,5}; //快速排序:将数据分为左右两部分,左边都比右边小 public static void QuakeSort(int [] a,int start,int end) { if(!(start<end)) return; int temp=a[start]; int i=start,j=end; while(i<j) { while(a[i]<temp && i<j) i++; while(a[j]>temp && j>i) j--; if(i<j) { int t=a[i]; a[i]=a[j]; a[j]=t; } } a[i]=temp; printArray(); QuakeSort(a,start,i-1); QuakeSort(a,i+1,end); } //计数排序: 对每一个数出现的次数进行计数,然后从大到小输出这些数 public static void CountSort(int[] a) { int max=a[0]; for(int i=0;i<a.length;i++) { max=max>a[i]?max:a[i]; } int []temp=new int[max+1]; for(int i=0;i<a.length;i++) { temp[a[i]]+=1; } int t=0; for(int i=0;i<max;i++) { t=temp[i]; while (t>0) { System.out.print(i+","); t--; } } } //基数排序:按照个位,十位百位分别排序 public static void JiShuSort(int[] a) { List<Integer> [] temp=new List[10]; for (int i=0;i<10;i++) { temp[i]=new ArrayList<Integer>(); } int max=a[0]; for(int i=0;i<a.length;i++) { max=max>a[i]?max:a[i]; } int k=0; while (max>10) { max=max/10; k++; } for(int i=0;i<=k;i++) { for(int j=0;j<a.length;j++) { int t= (int) (a[j]/(Math.pow(10,i))-(int)(a[j]/(Math.pow(10,i+1)))*10); temp[t].add(a[j]); } int tempdata=0; for(int j=0;j<10;j++) { while (temp[j].size()>0) { a[tempdata++]=temp[j].get(0); temp[j].remove(0); } } printArray(); } } // 归并排序 public static void MergeSort(int[] a,int start,int end) { int middle=(start+end)/2; if(start<end) { MergeSort(a,start,middle); MergeSort(a,middle+1,end); Merge(a,start,end); } } public static void Merge(int[] a,int start,int end) { int middle=(start+end)/2; int i=start;int j=middle+1; int [] temp=new int[end-start+1]; int tempindex=0; while(i<j && i<=middle && j<=end) { if(a[i]<=a[j]) { temp[tempindex++]=a[i]; i++; } else { temp[tempindex++]=a[j]; j++; } } while (i<=middle) { temp[tempindex++]=a[i]; i++; } while (j<=end) { temp[tempindex++]=a[j]; j++; } for( i=0;i<temp.length;i++) { a[start+i]=temp[i]; } } //堆排序:每次将最顶端的数和最后面的数交换,然后对除了最后面的数的堆进行调整 private static void HeapSort(int[] a) { for(int i=a.length/2;i>=0;i--) { HeapAdjust(a,i,a.length-1); } int temp=0; printArray(); for(int i=array.length-1;i>=0;i--) { temp=a[0]; a[0]=a[i]; a[i]=temp; HeapAdjust(a,0,i-1); printArray(); } } private static void HeapAdjust(int[] a,int start,int end) { int i=start*2+1; int j=start*2+2; int temp=-1; if(i<=end) temp=i; if(j<=end && a[j]>a[i]) temp=j; if(temp>=0 && a[start]<a[temp]) { int tempdata=a[temp]; a[temp]=a[start]; a[start]=tempdata; HeapAdjust(a,temp,end); } } private static void ShellSort(int[] a) { int d=a.length; while(d>=1) { for(int i=0;i<d;i++) { for(int j=i;j<a.length;j+=d) { int maxj=j; for(int k=j;k<a.length;k+=d) { maxj=a[maxj]>=a[k]?maxj:k; } int temp=a[j]; a[j]=a[maxj]; a[maxj]=temp; } } d=d/2; printArray(); } } public static void main(String[] args) { System.out.println("start"); // QuakeSort(array,0,array.length-1); // CountSort(array); //JiShuSort(array); // MergeSort(array,0,array.length-1); // ShellSort(array); HeapSort(array); printArray(); System.out.println("end"); } private static void printArray() { System.out.println(); for(int i=0;i<array.length;i++) { System.out.print(array[i]+","); } } }
相关文章推荐
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——JAVA实现
- java实现七种排序 (插入排序, 希尔排序, 插入排序, 快速排序, 简单选择排序, 堆排序, 归并排序)
- Java实现快速排序、归并排序、堆排序和希尔排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 插入排序,希尔排序,堆排序,归并排序,快速排序Java实现
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- 快速排序,归并排序,堆排序的java代码实现
- 常见排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 各种排序算法总结----基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 快速排序,插入排序,归并排序,计数排序,基数排序,堆排序
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)