java 各种排序算法实现
来源:互联网 发布:自响应留言板php 编辑:程序博客网 时间:2024/06/06 01:12
package com.meteor.algorithm;/** * sortMethods * Created by Meteor on 2016/3/26. */public class SortMethods { /** * Simple insertionSort(插入排序) * @param arr the array that need to sort * @param <T> type parameter */ public static <T extends Comparable<? super T>> void insertionSort(T [] arr){ int j; for(int p = 1;p < arr.length;p++){ T tmp = arr[p]; for(j = p;j > 0 && tmp.compareTo(arr[j-1])<0;j--){ arr[j] = arr[j-1]; } arr[j] = tmp; } } /** * quicksort(快速排序) * @param arr an array of Comparable items * @param left the left-most index of the subarray * @param rignt the right-most index of the subarray * @param <T> */ public static <T extends Comparable<? super T>> void quicksort(T[] arr,int left,int rignt){ int dp; if(left < rignt){ dp = partition(arr,left,rignt); quicksort(arr,left,dp-1); quicksort(arr,dp+1,rignt); } } private static <T extends Comparable<? super T>> int partition(T[] arr,int left,int right ){ T centerValue = arr[left]; while (left < right){ while (left < right && (arr[right].compareTo(centerValue))>0){ right--; } if(left<right){ arr[left++] = arr[right]; } while (left < right && (arr[left].compareTo(centerValue))<0){ left++; } if(left<right){ arr[right--] = arr[left]; } } arr[left] = centerValue; return left; } /** * shellSort(希尔排序) * @param arr * @param <T> */ public static <T extends Comparable<? super T>> void shellSort(T [] arr){ int j; for(int gap = arr.length/2;gap > 0;gap /= 2){ for(int i = gap;i<arr.length;i++){ T tmp = arr[i]; for(j = i;j >= gap && tmp.compareTo(arr[j-gap]) < 0; j -=gap){ arr[j] = arr[j-gap]; } arr[j] = tmp; } } } /** * Mergesort algotithm(归并排序) * @param arr an array of Comparable items * @param <T> */ public static <T extends Comparable<? super T>> void mergeSort(T[] arr){ T[] tempArr = (T[]) new Comparable[arr.length]; mergeSort(arr,tempArr,0,arr.length-1); } /** * Internal method that makes recursive calls * @param arr an array of Comparable items * @param tempArr an array to place the merged result * @param left the left-most index of the subarray * @param right the right-most index of the subarray * @param <T> */ private static <T extends Comparable<? super T>> void mergeSort(T[] arr,T[] tempArr,int left,int right){ if(left < right){ int center = (left+right)/2; mergeSort(arr,tempArr,left,center); mergeSort(arr,tempArr,center+1,right); merge(arr,tempArr,left,center+1,right); } } /** * Internal method that merges two sorted halves of a subarray * @param arr a array of Comparable items * @param tempArr an array to place the merged result * @param leftPos the left-most index of the subarray * @param rightPos the index of the start of the second half * @param rightEnd the right-most index of the subarray * @param <T> */ private static <T extends Comparable<? super T>> void merge(T [] arr,T [] tempArr, int leftPos, int rightPos,int rightEnd){ int leftEnd = rightPos -1; int tmpPos = leftPos; int numElements = rightEnd - leftPos + 1; //Main loop while (leftPos <= leftEnd && rightPos <= rightEnd){ if(arr[leftPos].compareTo(arr[rightPos]) <= 0){ tempArr[tmpPos++] = arr[leftPos++]; }else{ tempArr[tmpPos++] = arr[rightPos++]; } } //copy rest of first half while (leftPos <= leftEnd){ tempArr[tmpPos++] = arr[leftPos++]; } //copy rest of right half while (rightPos<=rightEnd){ tempArr[tmpPos++] = arr[rightPos++]; } //copy tempArr back for (int i = 0; i < numElements ; i++,rightEnd--) { arr[rightEnd] = tempArr[rightEnd]; } } public static void main(String[] args) { Integer [] arr = {10,19,12,14,9,6,3,45}; //SortMethods.insertionSort(arr); SortMethods.shellSort(arr); for (Integer tem:arr){ System.out.print(tem+"; "); } }}
package com.meteor.algorithm;
/**
* sortMethods
* Created by Meteor on 2016/3/26.
*/
public class SortMethods {
/** * Simple insertionSort(插入排序) * @param arr the array that need to sort * @param <T> type parameter */public static <T extends Comparable<? super T>> void insertionSort(T [] arr){ int j; for(int p = 1;p < arr.length;p++){ T tmp = arr[p]; for(j = p;j > 0 && tmp.compareTo(arr[j-1])<0;j--){ arr[j] = arr[j-1]; } arr[j] = tmp; }}/** * quicksort(快速排序) * @param arr an array of Comparable items * @param left the left-most index of the subarray * @param rignt the right-most index of the subarray * @param <T> */public static <T extends Comparable<? super T>> void quicksort(T[] arr,int left,int rignt){ int dp; if(left < rignt){ dp = partition(arr,left,rignt); quicksort(arr,left,dp-1); quicksort(arr,dp+1,rignt); }}private static <T extends Comparable<? super T>> int partition(T[] arr,int left,int right ){ T centerValue = arr[left]; while (left < right){ while (left < right && (arr[right].compareTo(centerValue))>0){ right--; } if(left<right){ arr[left++] = arr[right]; } while (left < right && (arr[left].compareTo(centerValue))<0){ left++; } if(left<right){ arr[right--] = arr[left]; } } arr[left] = centerValue; return left;}/** * shellSort(希尔排序) * @param arr * @param <T> */public static <T extends Comparable<? super T>> void shellSort(T [] arr){ int j; for(int gap = arr.length/2;gap > 0;gap /= 2){ for(int i = gap;i<arr.length;i++){ T tmp = arr[i]; for(j = i;j >= gap && tmp.compareTo(arr[j-gap]) < 0; j -=gap){ arr[j] = arr[j-gap]; } arr[j] = tmp; } }}/** * Mergesort algotithm(归并排序) * @param arr an array of Comparable items * @param <T> */public static <T extends Comparable<? super T>> void mergeSort(T[] arr){ T[] tempArr = (T[]) new Comparable[arr.length]; mergeSort(arr,tempArr,0,arr.length-1);}/** * Internal method that makes recursive calls * @param arr an array of Comparable items * @param tempArr an array to place the merged result * @param left the left-most index of the subarray * @param right the right-most index of the subarray * @param <T> */private static <T extends Comparable<? super T>>void mergeSort(T[] arr,T[] tempArr,int left,int right){ if(left < right){ int center = (left+right)/2; mergeSort(arr,tempArr,left,center); mergeSort(arr,tempArr,center+1,right); merge(arr,tempArr,left,center+1,right); }}/** * Internal method that merges two sorted halves of a subarray * @param arr a array of Comparable items * @param tempArr an array to place the merged result * @param leftPos the left-most index of the subarray * @param rightPos the index of the start of the second half * @param rightEnd the right-most index of the subarray * @param <T> */private static <T extends Comparable<? super T>> void merge(T [] arr,T [] tempArr, int leftPos, int rightPos,int rightEnd){ int leftEnd = rightPos -1; int tmpPos = leftPos; int numElements = rightEnd - leftPos + 1; //Main loop while (leftPos <= leftEnd && rightPos <= rightEnd){ if(arr[leftPos].compareTo(arr[rightPos]) <= 0){ tempArr[tmpPos++] = arr[leftPos++]; }else{ tempArr[tmpPos++] = arr[rightPos++]; } } //copy rest of first half while (leftPos <= leftEnd){ tempArr[tmpPos++] = arr[leftPos++]; } //copy rest of right half while (rightPos<=rightEnd){ tempArr[tmpPos++] = arr[rightPos++]; } //copy tempArr back for (int i = 0; i < numElements ; i++,rightEnd--) { arr[rightEnd] = tempArr[rightEnd]; }}public static void main(String[] args) { Integer [] arr = {10,19,12,14,9,6,3,45}; //SortMethods.insertionSort(arr); SortMethods.shellSort(arr); for (Integer tem:arr){ System.out.print(tem+"; "); }}
}
0 0
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法Java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- 各种排序算法java实现
- Material Design 笔记
- 统计学公开课大盘点
- 排序算法之快速排序(Java)
- 流插入运算符流提取运算符的重载
- 对关于iOS图片压缩的一点积累
- java 各种排序算法实现
- JAVA继承特点的小总结
- 求两个数的最大公约数
- 求有环单链表中的环长、环起点、链表长
- Linux学习6之环境下暂停进程和恢复暂停的进程
- 排序算法之归并排序(Java)
- 303. Range Sum Query - Immutable
- 数学基础公开课汇总
- HDU-5652 India and China Origins(并查集)