![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
可爱的暖兔兔
安卓开发
展开
-
排序算法之冒泡排序
冒泡排序是排序算法中入门级算法。 其主要思想是相邻两个数之间两两比较,小的冒泡到上面。 如果有n个元素则比较n-1次,每一轮少比较一次。 private static void bubbleSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { for (int j = a.length -原创 2016-03-30 17:27:05 · 268 阅读 · 0 评论 -
排序算法之选择排序
选择排序的思想是将数组a[0]和之后的数比较,选择出最小的和a[0]交换,然后忽略a[0],再将a[1]和之后的数比较,选择最小的和a[1]交换,直到a[n-1]和a[n]比较。private static void selectionSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { int sm原创 2016-03-30 17:42:09 · 277 阅读 · 0 评论 -
排序算法之直接插入排序
直接插入排序是将数组分成有序和无序两部分,每次将当前未排序的数和有序部分比较,移动有序部分,找到未排序数的插入点。 private static void insertionSort(int[] a, int first, int end) { for (int i = first + 1; i <= end; i++) { int firstUnsor原创 2016-03-30 17:52:49 · 410 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序是对直接插入排序的改进。直接插入排序是无距离的比较, 而希尔排序是将数组分距离比较,直到这个距离为1为止。 private static void xierSort(int[] a){ int temp,j; int gap = a.length; do{ gap = gap/3 + 1;原创 2016-03-30 20:35:04 · 251 阅读 · 0 评论 -
排序算法之归并排序
归并排序是将数组二分,二分,直至分得的大小为1为止。然后按序合并分开的数组。 private static int[] mergeSort(int a[],int first,int last){ if(first < last){ int mid = (first + last)/2; return merge(mergeSor原创 2016-03-31 20:32:57 · 247 阅读 · 0 评论 -
排序算法之快速排序
快速排序是每次选择锚点,然后将比锚点小的数放到锚点的左边,大的数放到右边。然后递归将锚点左边的数,继续选择锚点,比锚点小的数放到锚点的左边,大的数放到右边。同理递归锚点右边的数。直至剩下一个数为止。 由于锚点的选择会影响快速排序的效率,最差情况下,假如锚点左边没有数,那么锚点右边就是整个数组,这样情况下时间复杂度为n*n。 为了避免这种情况,我们选择数组中first,mid,last的中位数作为锚点原创 2016-03-31 22:29:22 · 292 阅读 · 0 评论 -
排序算法之堆排序
堆排序是构建最大堆后,将堆顶元素(最大数)与最后一个元素交换,然后将剩下的数重新构建最大堆,再将当前堆中的堆顶元素与最后一个元素交换,直至当前堆中无元素为止。 为了方便表示堆的左右孩子,我们使元素角标从1开始,假如s表示父亲结点,那么左孩子2s,右孩子2s+1 private static void heapSort(int[] a,int n) { //第一次构建最大堆原创 2016-04-05 12:14:18 · 297 阅读 · 0 评论