各类排序算法汇总(java源码)
2018-02-21 19:42
190 查看
**主要内容为(快排、插入排序、选择排序、冒泡、希尔排序、堆排序、归并排序),最下方有swap函数和测试代码(自行根据函数名替换排序算法即可)。** **快排**———————————————————————————— public static void quicksort(int[] arr,int low,int high){ int tmp; if(low>=high)return ; int tag=arr[low]; int left=low; int right=high; while(left<right){ while(right>left&&arr[right]>=tag){ right--; } while(left<right&&arr[left]<=tag){ left++; } if(left<right){ tmp=arr[left]; arr[left]=arr[right]; arr[right]=tmp; } } arr[low]=arr[left]; arr[left]=tag; quicksort(arr,low,right-1); quicksort(arr,right+1,high); } ———————————————————————————————— **插入排序**—————————————————————————— public static void insertsort(int[] arr){ int i; int j; for(i=1;i<arr.length;i++){ if(arr[i]<arr[i-1]){ int tmp=arr[i]; for(j=i-1;j>=0&&arr[j]>tmp;j--){ arr[j+1]=arr[j]; } arr[j+1]=tmp; } } ———————————————————————————————————————— **选择排序**—————————————————————————————————— selectsort public static void selectionsort(int[] arr){ for(int i=0;i<arr.length;i++){ int min=i; for(int j=i+1;j<arr.length;j++){ if(arr[j]<arr[min]) min=j; } if(min!=i){ int tmp=arr[i]; arr[i]=arr[min]; arr[min]=tmp; } } } —————————————————————————————————————————— **冒泡**———————————————————————————————————————— public static void bubblesort(int[] arr){ for(int i=0;i<arr.length;i++){ boolean flag=true; for(int j=0;j<arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ swap(arr,j,j+1); flag=false; } } if(flag) break; } } —————————————————————————————————————————— **希尔排序**—————————————————————————————————— //shellsort public static void shellsort(int[] arr){ for(int gap=arr.length/2;gap>=1;gap=gap/2){ for(int i=gap;i<arr.length;i++){ int j=i; //method1 by swap /* while(j>=gap&&arr[j]<arr[j-gap]){ swap(arr,j,j-gap); j-=gap; }*/ //method2 by move int tmp=arr[i]; while(j>=gap&&arr[j-gap]>tmp){ arr[j]=arr[j-gap]; j-=gap; } arr[j]=tmp; } } } ———————————————————————————————————————— **堆排序**———————————————————————————————————— //heapsort public static void heapsort(int[] arr){ //1.build tree for(int i =arr.length/2-1;i>=0;i--){ adjust(arr,i,arr.length); } for(int j=arr.length-1;j>0;j--){ swap(arr,0,j); adjust(arr,0,j); //因为开始建堆时调整使用的是arr.length ,此时j为减一后的“长度”,所以之后均为j即可。 } } public static void adjust(int[] arr,int i,int length){ int tmp=arr[i]; for(int j=2*i+1;j<length;j=2*j+1){ if(j+1<length&&arr[j]<arr[j+1]){ j++; } if(arr[j]>tmp){ arr[i]=arr[j]; i=j; } else{ break; } } arr[i]=tmp; } ———————————————————————————————————————————— **归并排序**———————————————————————————————————— //mergesort public static void mergesort(int[] arr){ int[] tmp=new int[arr.length]; sort(arr,0,arr.length-1,tmp); } public static void sort(int[]arr,int low,int high,int[] tmp){ if(low>=high)return; int middle=(low+high)/2; sort(arr,low,middle,tmp); sort(arr,middle+1,high,tmp); merge(arr,low,middle,high,tmp); } public static void merge(int[] arr,int low,int middle,int high,int[] tmp){ int a,b,c; a=low; b=middle+1; c=low; while(a<=middle&&b<=high){ if(arr[a]>arr[b]) { tmp[c++]=arr[b++]; } else{ tmp[c++]=arr[a++]; } } while(a<=middle){ tmp[c++]=arr[a++]; } while(b<=high){ tmp[c++]=arr[b++]; } while(low<=high){ arr[low]=tmp[low]; low++; } } ———————————————————————————————————————————— 交换函数swap public static void swap(int[]arr,int a,int b){ arr[a]=arr[a]+arr[b]; arr[b]=arr[a]-arr[b]; arr[a]=arr[a]-arr[b]; } 测试代码 public static void main(String[] args){ int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19}; //1 2 2 3 4 4 7 7 8 9 10 19 62 // int[] arr = {1,2,3,8,99,54,0,6,8,10,11,15,20}; mergesort(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } *本文旨在方便查询浏览,欢迎指正。*
相关文章推荐
- 各类排序算法汇总(java源码)
- 各类排序算法汇总
- java常用的7大排序算法汇总(个人收藏)
- java常用的7大排序算法汇总
- Java常用的7大排序算法汇总
- JAVA排序汇总-java排序算法-JAVA算法汇总
- 史上最全Java各类日志组件分析汇总
- java常用的7大排序算法汇总
- Java常用的7大排序算法汇总(转载)
- 排序算法源码(JAVA)
- java常用的7大排序算法汇总
- JAVA排序汇总-java排序算法
- 各类排序算法的Java实现
- java源码反向工程资源帖汇总
- 排序算法汇总总结_Java实现
- JAVA 排序算法汇总
- Java经典编程实例源码及视频专题汇总
- Java中的排序算法源码分析
- java常用的7大排序算法汇总
- java concurrent 源码汇总