【Java】几种面试常考排序
2016-05-28 23:36
507 查看
今天总结了一下,常考的几种排序情况。
/** * Created by sirius on 16/5/28. */ public class test { public static void main(String[] args) { int arr[] = {1,4,2,3,5,7,9,8,6}; //BetterBubbleSort(arr); int len = arr.length; //MergeSort(arr, 0, len-1); //QuickSort(arr, 0, len-1); InsertSort(arr); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } } public static void InsertSort(int arr[]) { int len = arr.length; } public static void QuickSort(int arr[], int left, int right) { int index; if (left < right) { index = partition(arr, left, right); QuickSort(arr, left, index -1); QuickSort(arr, index + 1, right); } } public static int partition(int arr[], int left, int right) { int pivot = arr[left]; int i = left; int j = right; while (i < j) { while (i < j && arr[j] >= pivot) { j--; } if (i < j) { arr[i++] = arr[j]; } while (i < j && arr[i] <= pivot) { i++; } if (i<j) { arr[j--] = arr[i]; } } arr[i] = pivot; return i; } public static void MergeSort(int arr[], int left , int right) { if (left < right) { int mid = ((right - left) >> 1) + left; MergeSort(arr, left, mid); MergeSort(arr, mid+1, right); MergeArray(arr, left, mid, right); } } public static void MergeArray(int arr[], int left, int mid, int right) { int i = left; int j = mid + 1; int k = 0; int[] tmp = new int[right - left + 1]; System.out.println("this time, left = " + left + ",right = " + right + ",i = " + i + ",j = " + j); while (i <= mid && j <= right) { if (arr[i] < arr[j]) { tmp[k++] = arr[i++]; } else { tmp[k++] = arr[j++]; } } while (i <= mid) { tmp[k++] = arr[i++]; } while (j <= right) { tmp[k++] = arr[j++]; } for (int k2 = 0; k2 < tmp.length; k2++) { arr[k2 + left] = tmp[k2]; } } public static void BubbleSort(int arr[]) { int len = arr.length; for (int i = 0; i < len; i++) { for (int j = 1; j < len - i; j++) { if (arr[j-1] > arr[j]) { int tmp = arr[j-1]; arr[j-1] = arr[j]; arr[j] = tmp; } } } } public static void BetterBubbleSort(int arr[]) { //如果这一趟没有发生交换,说明排序已经完成 int len = arr.length; boolean flag = true; for (int i = 0; i < len && flag; i++) { flag = false; for (int j = 1; j < len - i; j++) { //如果一次都没有交换,那么flag = false,就可以跳出了 if (arr[j-1] > arr[j]) { int tmp = arr[j-1]; arr[j-1] = arr[j]; arr[j] = tmp; flag = true; } } } } }
相关文章推荐
- 面试题10:二进制中1的个数
- 面试题9:斐波那契数列
- 面试题8:旋转数组的最小数字
- 面试题7:用两个栈实现队列
- 面试题6:重建二叉树
- java基础知识总结(面试篇)
- 操作系统常见面试题总结
- 操作系统面试题
- DBA职业生涯规划(转)
- 关于数据挖掘常见的面试要求
- 程序员容易发福的原因及解决办法
- 程序员容易发福的原因及解决办法
- 面试题29:找出数组中出现次数超过一半的数字-基于partition函数以及分摊法
- Java面试基础总结
- Web前端开发笔试&面试_03
- 推荐!国外程序员整理的Java资源大全
- 被swoole坑哭的PHP程序员
- 字符串的排列与组合
- 怎样花两年时间去面试一个人BY刘未鹏
- 剑指offer面试题7(java实现)