八大排序

  • 冒泡排序(稳定)
  • 选择排序(不稳)
  • 插入排序(稳定)
  • 希尔排序(不稳)
  • 快速排序(不稳)
  • 归并排序(稳定)
  • 基数排序(稳定)
  • 堆排序(不稳)

冒泡排序(稳定)

public class BubbleSort {public static void main(String[] args) {bubbleSort(ArrayTest.ARRAY);System.out.println(Arrays.toString(ArrayTest.ARRAY));}private static void bubbleSort(int[] array) {int temp = 0;for (int i = 0; i < array.length - 1; i++) {boolean flag = true;for (int j = 0; j < array.length - i - 1; j++) {if (array[j] > array[j + 1]) {flag = false;temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}if (flag){break;}}}
}

选择排序(不稳)

public class SelectSort {public static void main(String[] args) {selectSort(ArrayTest.ARRAY);System.out.println(Arrays.toString(ArrayTest.ARRAY));}private static void selectSort(int[] array) {for (int i = 0; i < array.length - 1; i++) {int min = array[i];int minIndex = i;for (int j = i + 1; j < array.length; j++) {if (array[j] < min) {min = array[j];minIndex = j;}}if (minIndex != i){array[minIndex] = array[i];array[i] = min;}}}
}

插入排序(稳定)

public class InsertSort {public void insertSort(int[] arr) {if (arr == null || arr.length <= 0) {return;}for (int i = 1; i < arr.length; i++) {for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {swap(arr, j, j + 1);}}}private void swap(int[] arr, int i, int i1) {int temp = arr[i];arr[i] = arr[i1];arr[i1] = temp;}public static void main(String[] args) {int[] arr = {5, 9, 4, 3, 8, 2, 1, 6};InsertSort insertSort = new InsertSort();insertSort.insertSort(arr);System.out.println(Arrays.toString(arr));}
}

希尔排序(不稳)

public class ShellSort {public static void main(String[] args) {shellSort(ArrayTest.ARRAY);System.out.println(Arrays.toString(ArrayTest.ARRAY));}private static void shellSort(int[] array) {for (int gap = array.length >> 1; gap > 0; gap /= 2) {for (int i = gap; i < array.length; i++) {int insertVal = array[i];int insertIndex = i;while (insertIndex - gap >= 0 && insertVal < array[insertIndex - gap]){array[insertIndex] = array[insertIndex - gap];insertIndex -= gap;}array[insertIndex] = insertVal;}}}
}

快速排序(不稳)

public class QuickSort {public static void main(String[] args) {quickSort(ArrayTest.ARRAY,0,ArrayTest.ARRAY.length - 1);System.out.println(Arrays.toString(ArrayTest.ARRAY));}private static void quickSort(int[] array, int left, int right) {if (left >= right) return;int mid = partition(array, left, right);quickSort(array, left, mid - 1);quickSort(array, mid + 1, right);}private static int partition(int[] array, int left, int right) {int pivot = array[right];int l = left;int r = right - 1;while (l <= r) {while (l <= r && pivot >= array[l]) l++;while (l <= r && pivot < array[r]) r--;if (l < r){int temp = array[l];array[l] = array[r];array[r] = temp;}}int temp = array[right];array[right] = array[l];array[l] = temp;return l;}
}

归并排序(稳定)

public class MergeSort {public void process(int[] arr, int left, int right) {if (left == right) {return;}int mid = left + ((right - left) >> 1);process(arr, left, mid);process(arr, mid + 1, right);merge(arr, left, mid, right);}private void merge(int[] arr, int left, int mid, int right) {int[] temp = new int[right - left + 1];int tempIndex = 0;int l = left;int r = mid + 1;while (l <= mid && r <= right) {temp[tempIndex++] = arr[l] < arr[r] ? arr[l++] : arr[r++];}while (l <= mid) {temp[tempIndex++] = arr[l++];}while (r <= right) {temp[tempIndex++] = arr[r++];}for (int i = 0; i < temp.length; i++) {arr[left + i] = temp[i];}}public static void main(String[] args) {int[] arr = {5, 2, 1, 9, 7, 34, 6, 8};MergeSort mergeSort = new MergeSort();mergeSort.process(arr, 0, arr.length - 1);System.out.println(Arrays.toString(arr));}
}

基数排序(稳定)

public class MergeSort {public void process(int[] arr, int left, int right) {if (left == right) {return;}int mid = left + ((right - left) >> 1);process(arr, left, mid);process(arr, mid + 1, right);merge(arr, left, mid, right);}private void merge(int[] arr, int left, int mid, int right) {int[] temp = new int[right - left + 1];int tempIndex = 0;int l = left;int r = mid + 1;while (l <= mid && r <= right) {temp[tempIndex++] = arr[l] < arr[r] ? arr[l++] : arr[r++];}while (l <= mid) {temp[tempIndex++] = arr[l++];}while (r <= right) {temp[tempIndex++] = arr[r++];}for (int i = 0; i < temp.length; i++) {arr[left + i] = temp[i];}}public static void main(String[] args) {int[] arr = {5, 2, 1, 9, 7, 34, 6, 8};MergeSort mergeSort = new MergeSort();mergeSort.process(arr, 0, arr.length - 1);System.out.println(Arrays.toString(arr));}
}

堆排序(不稳)

public class HeapSort {public void heapSort(int[] arr) {if (arr == null || arr.length < 2) {return;}for (int i = 0; i < arr.length; i++) {adjustHeap(arr, i);}
//        for (int i = arr.length - 1; i >= 0 ; i--) {//            heapfyi(arr,i,arr.length);
//        }int heapSize = arr.length;swap(arr, 0, --heapSize);while (heapSize > 0) {heapfyi(arr, 0, heapSize);swap(arr, 0, --heapSize);}}private void heapfyi(int[] arr, int index, int heapSize) {//左孩子int left = index * 2 + 1;while (left < heapSize) {//顺序必须是arr[left+ 1] > arr[left] ,因为前者成立的情况下才会进行比较,如果前者不成立,只能返回left。int largest = left + 1 < heapSize && arr[left+ 1] > arr[left ] ? left + 1 : left;largest = arr[index] > arr[largest] ? index : largest;if (largest == index) {break;}swap(arr, index, largest);index = largest;left = index * 2 + 1;}}private void adjustHeap(int[] arr, int index) {while (arr[index] > arr[(index - 1) / 2]) {swap(arr, index, (index - 1) / 2);index = (index - 1) / 2;}}private void swap(int[] arr, int index, int i) {int temp = arr[index];arr[index] = arr[i];arr[i] = temp;}public static void main(String[] args) {int[] arr = {5, 2, 9, 7, 6, 1, 3, 0};HeapSort heapSort = new HeapSort();heapSort.heapSort(arr);System.out.println(Arrays.toString(arr));}
}

八大排序Java代码(新)相关推荐

  1. 八大排序:Java实现八大排序及算法复杂度分析

    目录 QUESTION:八大排序:Java实现八大排序及算法复杂度分析 ANSWER: 一:冒泡排序 1.算法分析 2.时间复杂度分析 3.代码 二:选择排序 1.算法分析 2.时间复杂度分析 3.代 ...

  2. 计数排序和桶排序 java代码实现

    文章目录 计数排序 java代码实现 单元测试 桶排序 java代码实现 单元测试 计数排序 java代码实现 package csdn.dreamzuora.sort;import java.uti ...

  3. 希尔排序java代码_希尔排序及希尔排序java代码

    由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序按照此规律直到全部参与了排序.然后将间隔约定为4-1=3,然后 ...

  4. 八大排序(JAVA)

    文章目录 直接插入排序 希尔排序 选择排序 形式一: 形式二: 堆排序 冒泡排序 快速排序 Hoare 时间复杂度分析 注意点: 快排优化 挖坑法 前后指针法 三数取中法 递归到小区间 递归版本的优化 ...

  5. 八大排序(Java完整版)

    关于八大排序的算法思想我这里不再赘述,直接上代码.存在错误之处望指正,大家一起进步! --------------------------------------------------------- ...

  6. 选择排序java代码_JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  7. 联系人排序java代码_Android仿微信联系人按字母排序_脚本之家

    App只要涉及到联系人的界面,几乎都是按照字母排序以及导航栏的方式.既然这个需求这么火,于是开始学习相关内容,此篇文章是我通过参考网上资料独立编写和总结的,希望多多少少对大家有所帮助,写的不好,还请各 ...

  8. 联系人排序java代码_Android仿微信联系人按字母排序

    App只要涉及到联系人的界面,几乎都是按照字母排序以及导航栏的方式.既然这个需求这么火,于是开始学习相关内容,此篇文章是我通过参考网上资料独立编写和总结的,希望多多少少对大家有所帮助,写的不好,还请各 ...

  9. 【C++】算法集锦(1):八大排序算法 :GIF + 亲测代码 +专项练习平台

    主要目的呢,是为了我自己记住. 这篇写完,以前那几篇排序的博客都可以删了. 五天之后就设为粉丝可见啦. 文章目录 1.八大排序总览 代码实现一律放到文末,方便有兴趣边看边练的小伙伴动手自己写. 2.冒 ...

最新文章

  1. 你居然还不知道Mysql存储引擎InnoDB分为内存架构、磁盘架构?
  2. 发布Wear OS by Google开发者预览版
  3. android 关机充电流程
  4. char和varchar的区别以及尾部空格问题 - sqlserver演示
  5. ios gb2312转utf-8
  6. eclipse没有server怎么办
  7. 如何在三个月内获得三年的工作经验
  8. Apache Drill
  9. linux挂载ipsan存储,centos系统ISCSI挂载IPSAN存储
  10. 【GPL和LGPL】【VPlayer不开源】【其他开源的基本都仅是ffmpeg修改部分】
  11. 最细致全面架设单机传奇教程
  12. Python运维之 Flask + 宝塔运行小应用
  13. 程序员博客 - 加分项
  14. c#中控制不能从一个case标签贯穿到另一个case标签是啥意思
  15. 4种解决json日期格式问题的办法
  16. 机房动环监控系统厂家品牌
  17. 打赢下一场游戏大战!PlayStation能满足玩家一切需求?
  18. 我的世界回连Center
  19. ARM学习笔记--day10
  20. windows系统运维基础

热门文章

  1. 百度CFO王湛生死亡原因,因抢救妻女逝世
  2. 微信小程序-form表单保存提交与重置
  3. java s1 s2 s3 s4_电源管理中的S0 S1 S2 S3 S4 S5
  4. android如何实现打分功能,Android App中使用RatingBar实现星级打分功能的教程
  5. 刚开车时的一些基本注意点,注意事项。
  6. 中科院一区计算机IPM期刊免版面费专刊征稿, 审稿2个月
  7. iOS学习之iOS5.0以上 使用新浪微博开放平台OAuth
  8. 现在做什么生意比较赚钱,且投资小利润大?
  9. sybase数据库的两种备份方法
  10. Docker容器整合wagon-ssh自动化部署SpringBoot工程