排序算法
来源:互联网 发布:苹果手机照片传不到mac 编辑:程序博客网 时间:2024/06/05 11:40
- 计数排序
public class countSort { //有in ,out 的版本 public static void countSort(int []in, int[]out,int k){ int []temp=new int[k+1]; for(int i=0;i<in.length;i++){ temp[in[i]]++; } //temp 记录的是个数。所以 -1 至关重要。 for(int i=1;i<=k;i++){ temp[i]+=temp[i-1]; } for(int i=in.length-1;i>=0;i--){ out[temp[in[i]]-1]=in[i]; temp[in[i]]--; } } public static void main(String[]args){ int []A={6,3,2,5,1,4,0,5};// int []R=new int[A.length]; countSort(A,6); System.out.println(Arrays.toString(A)); }//优先第二种 public static void countSort(int[]A,int k){ int []temp=new int[k+1]; for(int i=0;i<A.length;i++){ temp[A[i]]++; } int p=0; for(int i=0;i<=k;i++){ while(temp[i]-- >0){ A[p++]=i; } } }}
- 堆排序
//对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;《《《《《《《《//max_heapfy(int []A,int i);//buildMaxHeap(int []A);//heapSort(int []A)//100w个数中找最大的100个数, 建立一个100的maxheap,从101个开始,如果大于A【0】,交换,调用MaxHeapfy (size=100);class heapsort { //@2 public static void buildMaxHeap(int []A){ for(int i=(A.length-1)/2;i>=0;i--){ MaxHeapfy(A,i,A.length); } } //@1 maxHeapfy notice size; public static void MaxHeapfy(int []A,int i,int size){ int left=i*2+1; int right=i*2+2; int max; if(left<size&&A[left]>A[i])max=left; else max=i; if(right<size&&A[right]>A[max])max=right; if(max!=i){ int temp=A[max]; A[max]=A[i]; A[i]=temp; } } //@3 public static void heapSort(int []A){ buildMaxHeap(A); for(int i=A.length-1;i>0;i--){ int temp=A[0]; A[0]=A[i]; A[i]=temp; MaxHeapfy(A,0,i); } } public static void main(String[]args){ int []A={5,4,3,2,1}; heapSort(A); System.out.println(Arrays.toString(A)); }}
- 插入排序
public class insetsort { public static void insertsort(int[]A,int left,int right){ for(int i=left+1;i<=right;i++){ int p=i-1; int key=A[i]; while(p>=left&&A[p]>key){ int temp=A[p]; A[p+1]=A[p]; A[p]=temp; p--; } A[p+1]=key; //* } } public static void main(String [] args){ int []A={5,4,3,2,1}; insertsort(A,1,4); for(int i:A){ System.out.print(i); } }}
- 冒泡排序
public class maopao { public static void msort(int []A,int left,int right){// for(int i=0;i<A.length-1;i++){ //n-1 次// for(int j=0;j<A.length-1-i;j++){// if(A[j]>A[j+1]){// int temp=A[j];// A[j]=A[j+1];// A[j+1]=temp;// }// }// } for(int i=0;i<right-left;i++){ for(int j=left;j<right-i;j++){ if(A[j]>A[j+1]){ int temp=A[j]; A[j]=A[j+1]; A[j+1]=temp; } } } } public static void main(String []args){ int []A={3,4,2,5,7,3,1}; msort(A,5,A.length-1); for(int i:A){ System.out.print(i); } }}
5.归并排序
public class mergasort { public static void msort(int []A,int left,int right){ if(left<right){ int mid=(left+right)/2; msort(A,left,mid); msort(A,mid+1,right); merge(A,left,mid,right); } } public static void merge(int []A,int left,int mid,int right){ int []l=new int[mid-left+2]; int []r=new int[right-mid+1]; for(int i=0;i<=l.length-1;i++){ l[i]=A[left+i]; } l[l.length-1]=Integer.MAX_VALUE; for(int i=0;i<r.length-1;i++){ r[i]=A[mid+1+i]; } r[r.length-1]=Integer.MAX_VALUE; int pl=0,pr=0; for(int i=left;i<=right;i++) { if (l[pl]<=r[pr]) { A[i]=l[pl]; pl++; }else{ A[i]=r[pr]; pr++; } } } public static void main(String []args){ int []A={5,4,3,2,1}; msort(A,1,4); for(int i:A){ System.out.print(i); } }}
- 快速排序
public class quicksort { void qsort(int []A,int l,int r){ if(l<r){ int temp=partition(A,l,r); qsort(A,l,temp-1); qsort(A,temp+1,r); } } int partition(int []A,int left,int right){ int i=left-1; int key=A[right]; for(int j=left;j<right;j++){ if(A[j]<key){ i++; int temp=A[j]; A[j]=A[i]; A[i]=temp; } } int temp=A[i+1]; A[i+1]=A[right]; A[right]=temp; return i+1; } public static void main(String []args){ int []A={1,9,2,4,3,6,8,5}; quicksort test=new quicksort(); test.qsort(A,0,A.length-1); for(int i:A){ System.out.print(i); } }}
- 简单shell排序
public class shellsort { public static void shellsort(int[]A, int n){ for(int grap=n/2;grap>0;grap/=2){ for(int i=grap;i<A.length;i++){ int key=A[i]; int j=i-grap; for(;j>=0&&A[j]>key;j-=grap){ A[j+grap]=A[j]; } A[j+grap]=key; } } } public static void main(String []args){ int []A={5,4,3,2,1}; shellsort(A,3); for(int i:A){ System.out.print(i); } }}
- 选择排序
public class shellsort { public static void shellsort(int[]A, int n){ for(int grap=n/2;grap>0;grap/=2){ for(int i=grap;i<A.length;i++){ int key=A[i]; int j=i-grap; for(;j>=0&&A[j]>key;j-=grap){ A[j+grap]=A[j]; } A[j+grap]=key; } } } public static void main(String []args){ int []A={5,4,3,2,1}; shellsort(A,3); for(int i:A){ System.out.print(i); } }}```**小tips**<div class="se-preview-section-delimiter"></div>
public class tips {
//Collections
//int [] ary=new int[list.size()];//list.toArray(ary);// list.sort();// list.sort(new Comparator(){// public int compara(T o1,T o2){// return o1-o2;// });int [] array={3,2,1};//new ArrayList(Arrays.asList());//Arrays.sort(array);//Arrays.sort(array,new Comparator(){});
}
“`
0 0
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 排序算法
- 数据结构实践项目——串
- 深入探讨Java的类加载机制
- LXT6架构-linux-x/arch/arm/下的故事(回顾)
- OpenCV3.0.0在VS2013中的配置(Win7_32位)
- 深入浅出MFC学习笔记4--简单而完整:MFC骨干程序
- 排序算法
- 记惠普javaweb实训周之版本控制系统的实践
- 安卓手机烧内存卡(就是内存卡损坏)的补救办法
- java传入相关的时间可以获取这个时间段的星期时间
- Ember.js 入门指南——包裹内容
- 数据库优化原则2
- [C/C++基础知识] 一篇就让你彻底搞懂qsort快速排序的文章
- PHP第一季视频教程.李炎恢.学习笔记(三)(第2章 基本语法(2))
- LeetCode 题解(271) : Word Pattern II