1. package dataStructureAlgorithmReview.day01;
  2.  
  3. import java.util.Arrays;
  4. /**
  5. *
  6. * @author shundong
  7. *
  8. */
  9. public class Code_02_SelectionSort {
  10. //选择排序
  11. public static void selectionSort(int[] arr) {
  12. if (arr == null || arr.length < 2) {
  13. return;
  14. }
  15. for (int i = 0; i < arr.length - 1; i++) {
  16. int minIndex = i;//将 i位置下标的元素作为最小值
  17. //内层循环是遍历所有的数组 找出最小值 赋值给mixIndex
  18. for (int j = i + 1; j < arr.length; j++) {
  19. // 吧 i 和 i+1 做比较 较小的赋值给 minIndex
  20. minIndex = arr[j] < arr[minIndex] ? j : minIndex;
  21. }
  22. //将最小值 赋值给 当前第一个位置 下一次即 次一的 位置 i++的
  23. swap(arr, i, minIndex);
  24. }
  25. }
  26.  
  27. public static void swap(int[] arr, int i, int j) {
  28. int tmp = arr[i];
  29. arr[i] = arr[j];
  30. arr[j] = tmp;
  31. }
  32.  
  33. // for test
  34. public static void comparator(int[] arr) {
  35. Arrays.sort(arr);
  36. }
  37.  
  38. // for test
  39. public static int[] generateRandomArray(int maxSize, int maxValue) {
  40. int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
  41. for (int i = 0; i < arr.length; i++) {
  42. arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
  43. }
  44. return arr;
  45. }
  46.  
  47. // for test
  48. public static int[] copyArray(int[] arr) {
  49. if (arr == null) {
  50. return null;
  51. }
  52. int[] res = new int[arr.length];
  53. for (int i = 0; i < arr.length; i++) {
  54. res[i] = arr[i];
  55. }
  56. return res;
  57. }
  58.  
  59. // for test
  60. public static boolean isEqual(int[] arr1, int[] arr2) {
  61. if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
  62. return false;
  63. }
  64. if (arr1 == null && arr2 == null) {
  65. return true;
  66. }
  67. if (arr1.length != arr2.length) {
  68. return false;
  69. }
  70. for (int i = 0; i < arr1.length; i++) {
  71. if (arr1[i] != arr2[i]) {
  72. return false;
  73. }
  74. }
  75. return true;
  76. }
  77.  
  78. // for test
  79. public static void printArray(int[] arr) {
  80. if (arr == null) {
  81. return;
  82. }
  83. for (int i = 0; i < arr.length; i++) {
  84. System.out.print(arr[i] + " ");
  85. }
  86. System.out.println();
  87. }
  88.  
  89. // for test
  90. public static void main(String[] args) {
  91. int testTime = 500000;
  92. int maxSize = 100;
  93. int maxValue = 100;
  94. boolean succeed = true;
  95. for (int i = 0; i < testTime; i++) {
  96. int[] arr1 = generateRandomArray(maxSize, maxValue);
  97. int[] arr2 = copyArray(arr1);
  98. selectionSort(arr1);
  99. comparator(arr2);
  100. if (!isEqual(arr1, arr2)) {
  101. succeed = false;
  102. printArray(arr1);
  103. printArray(arr2);
  104. break;
  105. }
  106. }
  107. System.out.println(succeed ? "Nice!" : "Fucking fucked!");
  108.  
  109. int[] arr = generateRandomArray(maxSize, maxValue);
  110. printArray(arr);
  111. selectionSort(arr);
  112. printArray(arr);
  113. }
  114.  
  115. }

  

选择排序Java版的更多相关文章

  1. 冒泡排序与选择排序(经典版)----java基础总结

    前言:关于冒泡排序和选择排序,每次写的时候都要再看看他们的概念,这次,就自己写明白 1.冒泡排序: 其实冒泡排序应该用例子证明,设数组长度为N. 1.比较相邻的前后二个数据,如果前面数据大于后面的数据 ...

  2. 基本排序算法——选择排序java实现

    选择排序与冒泡排序有很大的相同点,都是一次遍历结束后能确定一个元素的最终位置,其主要思路是,一次遍历选取最小的元素与第一个元素交换,从而使得一个个元素有序,而后选择第二小的元素与第二个元素交换,知道, ...

  3. 选择排序-java

    排序-选择排序 基本思想:在待排序子表中找出最大(小)元素, 并将该元素放在子表的最前(后)面. 平均时间:O(n2) 最好情况:O(n2) 最坏情况:O(n2) 辅助空间:O(1) 稳定性:不稳定 ...

  4. 直接选择排序----java实现

    直接选择排序思路: 从待排序数据中选择第一个假定为最小的下标,然后他后面的与他循环比较,得到真的最小值下标,然后最小值前的那一区段依次后移,并把最小值赋值给第一个元素.第二次时,假定第二个为最小,然后 ...

  5. c++复杂桶排序Java版

    c++复杂桶排序Java版 题目和我的前几个排序一样 这次是Java版的 代码 + 注释 package com.vdian.qatest.supertagbiz.test.niu; /** * Cr ...

  6. 选择排序java代码

    /** * 选择排序 * * 原理:将最小值与数组第1个即array[0]交换,第二次则忽略array[0],直接从array[1]至array[array.length-1]中 * 选择出最小值与a ...

  7. 选择排序java

    先简述选择排序,然后上代码 进行选择排序就是将所有的元素扫描一遍,从中挑选(或者说是选择,这正是这个排序名字的由来)最小的一个元素,将这个最小的元素与最左边的元素交换位置 ,现在最左边的元素就是有序的 ...

  8. 冒泡排序与简单选择排序——Java实现

    1.冒泡排序 1)原理说明:反复遍历要排序的数列,一次比較两个元素,假设他们的顺序错误就把他们交换过来.走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕. 2)代码实现: pa ...

  9. 冒泡排序和选择排序-java

    冒泡排序 假设有一数组int [] arr  = {9,5,4,10,2};原理是第一个元素和第二个比较,如果前者大于后者便交换位置,然后第二个元素和第三个元素比较,如果前者大于后者便交换位置.以此类 ...

随机推荐

  1. Vue生产环境部署

    前面的话 开发时,Vue 会提供很多警告来帮助解决常见的错误与陷阱.生产时,这些警告语句却没有用,反而会增加载荷量.再次,有些警告检查有小的运行时开销,生产环境模式下是可以避免的.本文将详细介绍Vue ...

  2. 【python练习题】程序16

    #题目:输出指定格式的日期. import time print (time.strftime('%Y:%m:%d %X',time.localtime(time.time())))

  3. Simple Use IEnumerable<T>

    Private static IEnumerable<T> FunDemo(T para) { while(...) { .... yield return Obj; } } static ...

  4. js 异步代码

    这段时间一直在用node.js做毕设的后台,所以需要一些异步代码操作,主要的异步方式有:Promise.Generator 和 async / await,但下面主要讲 Promise 和 async ...

  5. Ubuntu16.04安装使用wps

    Ubuntu16.04安装使用wps 1.wps官网下载并安装wps 此处以Debian安装包为例,官网下载路径 http://www.wps.cn/product/wpslinux/# 直接安装: ...

  6. 解决面板里没有network manager图标的问题 ,也就是在桌面环境下,没有那个网络图标

    在安装好了桌面之后,竟然发现没有那个连接网络的图标,本来想连接无限网络.可是.......如果去手动命令行下去配置这个连接wifi有些麻烦,所以我还是去找解决办法了 我执行了一条命令就解决了 gcon ...

  7. Luogu5289 十二省联考2019字符串问题(后缀数组+拓扑排序+线段树/主席树/KDTree)

    先考虑80分做法,即满足A串长度均不小于B串,容易发现每个B串对应的所有A串在后缀数组上都是一段连续区间,线段树优化连边然后判环求最长链即可.场上就写了这个. 100分也没有什么本质区别,没有A串长度 ...

  8. 洛谷P1084 疫情控制(NOIP2012)(二分答案,贪心,树形DP)

    洛谷题目传送门 费了几个小时杠掉此题,如果不是那水水的数据的话,跟列队的难度真的是有得一比... 话说蒟蒻仔细翻了所有的题解,发现巨佬写的都是倍增,复杂度是\(O(n\log n\log nw)\)的 ...

  9. 【题解】 bzoj3693: 圆桌会议 (线段树+霍尔定理)

    bzoj3693 Solution: 显然我们可以把人和位置抽象成点,就成了一个二分图,然后就可以用霍尔定理判断是否能有解 一开始我随便YY了一个\(check\)的方法:就是每次向后一组,我们就把那 ...

  10. 自学zabbix集锦

    zabbix概念集锦 01 Zabbix采集数据方式 02 开源监控软件Cacti.nagios 03 Zabbix常用的术语 04 Zabbix核心概念回顾 05 Zabbix triggers-- ...