常见排序算法(Java实现)
来源:互联网 发布:手机在线客服系统源码 编辑:程序博客网 时间:2024/06/03 19:38
常见排序算法实现。
import java.util.Arrays;/** * * @ClassName: SortAlgorithms * * @Description: 常见的排序算法 java 实现 * void bubbleSort(T[]) 冒泡排序 * void insertSort(T[]) 插入排序 * void selectSort(T[]) 选择排序 * void shellSort(T[]) 希尔排序 * void mergeSort(T[]) 归并排序 * void quickSort(T[]) 快速排序 * void heapSort(T[]) 堆排序 * @author: ccding * @date: 2016年10月26日 上午10:50:55 * * @param <T> 待排序元素的类型 */public class SortAlgorithms <T extends Comparable<T>> { public void bubbleSort(T[] nums){ T tmp; for(int i=0; i<nums.length; i++){ for(int j=i+1; j<nums.length; j++){ if(nums[j].compareTo(nums[i]) < 0){ tmp = nums[j]; nums[j] = nums[i]; nums[i] = tmp; } } } } public void insertSort(T[] nums){ T tmp; for(int i=1; i<nums.length; i++){ tmp = nums[i]; int j = i-1; while(j>=0 && tmp.compareTo(nums[j]) < 0){ nums[j+1] = nums[j]; j--; } nums[j+1] = tmp; } } public void selectSort(T[] nums){ T tmp; int minIndex; for(int i=0; i<nums.length; i++){ minIndex = this.getMinIndex(nums, i); tmp = nums[minIndex]; nums[minIndex] = nums[i]; nums[i] = tmp; } } private int getMinIndex(T[] nums, int startIndex){ T minValue = nums[startIndex]; int minIndex = startIndex; for(int i=startIndex; i<nums.length; i++){ if(minValue.compareTo(nums[i]) > 0){ minValue = nums[i]; minIndex = i; } } return minIndex; } public void shellSort(T[] nums){ int gap = nums.length >> 1; T tmp; while(gap >= 1){ for(int i=gap; i<nums.length; i++){ if(nums[i].compareTo(nums[i-gap]) < 0){ tmp = nums[i]; int j = i-gap; while( j>=0 && tmp.compareTo(nums[j])<0){ nums[j+gap] = nums[j]; j -= gap; } nums[j+gap] = tmp; } } gap = gap >> 1; } } public void mergeSort(T[] nums){ mergeSort(nums, 0, nums.length-1); } private void mergeSort(T[] nums, int startIndex, int endIndex){ if(endIndex > startIndex){ int midIndex = (endIndex+startIndex) >> 1; mergeSort(nums, startIndex, midIndex); mergeSort(nums, midIndex+1, endIndex); merge(nums, startIndex, midIndex, endIndex); } } private void merge(T[] nums, int s, int m, int e){ T[] sub1 = Arrays.copyOfRange(nums, s, m+1); T[] sub2 = Arrays.copyOfRange(nums, m+1, e+1); int idx1 = 0, idx2 = 0; int k=s; while(idx1<sub1.length && idx2<sub2.length){ if(sub1[idx1].compareTo(sub2[idx2]) < 0){ nums[k++] = sub1[idx1++]; }else{ nums[k++] = sub2[idx2++]; } } while(idx1<sub1.length){ nums[k++] = sub1[idx1++]; } while(idx2<sub2.length){ nums[k++] = sub2[idx2++]; } } public void quickSort(T[] nums){ quickSort(nums, 0, nums.length-1); } private void quickSort(T[] nums, int s, int t){ if(s < t){ int mid = partition(nums, s, t); quickSort(nums, s, mid-1); quickSort(nums, mid+1, t); } } private int partition(T[] nums, int s, int t){ int randomIdx = (int)((t-s) * Math.random())+s; T e = nums[randomIdx]; exchange(nums, randomIdx, t); while(s < t){ while(s<t && nums[s].compareTo(e) <= 0) s++; nums[t] = nums[s]; while(s<t && nums[t].compareTo(e) >= 0) t--; nums[s] = nums[t]; } nums[s] = e; return s; } public void heapSort(T[] nums){ buildMinHeap(nums); int heapSize = nums.length; for(int i=nums.length-1; i>=0; i--){ exchange(nums, i, 0); heapify(nums, 0, --heapSize); } } private void buildMinHeap(T[] nums){ for(int i= nums.length>>1; i>=0; i--){ heapify(nums, i, nums.length); } } private void heapify(T[] nums, int i, int heapSize){ int l = i<<1; int r = l+1; int large = i; if(l<heapSize && nums[l].compareTo(nums[large])<0){ large = l; } if(r<heapSize && nums[r].compareTo(nums[large])<0){ large = r; } if(large != i){ exchange(nums, large, i); heapify(nums, large, heapSize); } } private void exchange(T[] nums, int i, int j){ T tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; }}
阅读全文
0 0
- 常见排序算法总结(java实现)
- 常见排序算法(java实现)
- 常见排序算法(java实现)
- 常见排序算法(Java实现)
- 常见排序算法--java实现
- java实现常见排序算法
- Java实现常见排序算法
- 常见排序算法java实现
- 常见排序算法java实现
- 几种常见的排序算法(java实现)
- 常见排序算法的java实现
- 常见经典排序算法的java实现
- 常见排序算法的java实现
- 六种常见排序算法Java实现
- 常见内排序算法的java实现
- 常见排序算法的Java实现
- 常见的排序算法,Java实现
- JAVA实现常见简单排序算法
- Webbrowser知识点记录(c#研发)
- 线程辅助类(三)--Semaphore
- (七) Fiori经典布局介绍之Employee List
- java类的加载机制和反射浅析
- [INS-30131] 执行安装程序验证所需的初始设置失败.
- 常见排序算法(Java实现)
- id生成策略-(联合主键xml annotation)-5
- latex插入图片
- POJ 1583 Choose Your Words Carefully 笔记
- VPS搭建VPN
- python学习之路一
- Erlang语言精髓之一
- 文章标题
- jQuery_Ajax: $.ajax()中的常用参数