Java基础-排序算法
2016-03-20 14:33
537 查看
1.冒泡排序
/** * 冒泡排序算法 * <p/> * 依次把第i个元素与 i+1到arr.length的元素进行比较, * 发现有比i更小(大)的元素的话,则进行位置替换 * <p/> * 第i次遍历,保证i是 i+1到arr.length里面最小(大)的元素 * * 时间复杂度O(n*n) */ public void bubbleSort(int[] arr) { System.out.println("排序前:" + Arrays.toString(arr)); int tmp;//临时变量,用于值交换 for (int i = 0; i < arr.length - 1; i++) { for (int j = i + 1; j < arr.length; j++) { if (arr[i] > arr[j]) { //如果arr[i]不是最小的,则把最小的放到i的位置 tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } } System.out.println("排序后:" + Arrays.toString(arr)); }
2.快速排序
/** * 快速排序 * 分治思想,大于idx的放右边,小于idx的放左边,保证idx是正确的位置, * 然后同时对i的左边和右边分别进行排序 */ public static void quickSort(int[] arr) { System.out.println("排序前:" + Arrays.toString(arr)); sort1(arr, 0, arr.length - 1); System.out.println("排序后:" + Arrays.toString(arr)); } //实现方式一 public void sort1(int[] arr, int left, int right) { int low = left;//低位 int high = right;//高位 int key = arr[left];//当前寻找位置的key while (low < high) { while (low < high && arr[high] >= key) { high--; } if (low < high) { int temp = arr[high]; arr[high] = arr[low]; arr[low] = temp; low++; //位置交换完成后,低位需要加1, //因为arr[low]肯定是比key小,不需要再去比较 } while (low < high && arr[low] <= key) { low++; } if (low < high) { int temp = arr[high]; arr[high] = arr[low]; arr[low] = temp; high--; //位置交换完成后,高位需要减1, //因为交换到高位的数值肯定比key大,不需要再去比较 } } //while循环结束,此时,arr[low]的左边都比它小,右边都比arr[low]大 //也就是说,arr[low]数值所在的位置肯定是争取的 //继续对左边进行排序 if (low > left) { sort1(arr, left, low - 1); } //继续对右边进行排序 if (high < right) { sort1(arr, low + 1, right); } }
3.插入排序
/** * 插入排序 * 第i次循环保证 [0-i]的数据是有序的,然后第i个数继续加入到有序列表 * 基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据 * 算法适用于少量数据的排序,时间复杂度为O(n^2) */ public void insertionSort(int[] arr) { System.out.println("排序前:" + Arrays.toString(arr)); for (int i = 1; i < arr.length; i++) { int curr = arr[i];//记住当前需要移动的数 int j = i - 1; while (j >= 0 && arr[j] > curr) {//这里需要注意,每个数都与当前数比较,找到当前数的正确位置 arr[j + 1] = arr[j];//数据复制 j--;//如果不是正确的位置,--后继续找 } //到这里,找到了正确的位置,进行交换 arr[j + 1] = curr; } System.out.println("排序后:" + Arrays.toString(arr)); }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- JavaScript演示排序算法
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序