1. package dataStructureAlgorithmReview.day01;
  2.  
  3. import java.util.Arrays;
  4. /**
  5. * 插入排序
  6. * @author shundong
  7. *
  8. */
  9. public class Code_01_InsertionSort {
  10. //bigO(N^2)的时间复杂度
  11. public static void insertionSort(int[] arr) {
  12. if (arr == null || arr.length < 2) {
  13. return;
  14. }
  15. for (int i = 1; i < arr.length; i++) {
  16. for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
  17. swap(arr, j, j + 1);
  18. }
  19. }
  20. }
  21.  
  22. public static void swap(int[] arr, int i, int j) {
  23. arr[i] = arr[i] ^ arr[j];
  24. arr[j] = arr[i] ^ arr[j];
  25. arr[i] = arr[i] ^ arr[j];
  26. }
  27.  
  28. // for test
  29. public static void comparator(int[] arr) {
  30. Arrays.sort(arr);
  31. }
  32.  
  33. // for test
  34. public static int[] generateRandomArray(int maxSize, int maxValue) {
  35. int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
  36. for (int i = 0; i < arr.length; i++) {
  37. arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
  38. }
  39. return arr;
  40. }
  41.  
  42. // for test
  43. public static int[] copyArray(int[] arr) {
  44. if (arr == null) {
  45. return null;
  46. }
  47. int[] res = new int[arr.length];
  48. for (int i = 0; i < arr.length; i++) {
  49. res[i] = arr[i];
  50. }
  51. return res;
  52. }
  53.  
  54. // for test
  55. public static boolean isEqual(int[] arr1, int[] arr2) {
  56. if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
  57. return false;
  58. }
  59. if (arr1 == null && arr2 == null) {
  60. return true;
  61. }
  62. if (arr1.length != arr2.length) {
  63. return false;
  64. }
  65. for (int i = 0; i < arr1.length; i++) {
  66. if (arr1[i] != arr2[i]) {
  67. return false;
  68. }
  69. }
  70. return true;
  71. }
  72.  
  73. // for test
  74. public static void printArray(int[] arr) {
  75. if (arr == null) {
  76. return;
  77. }
  78. for (int i = 0; i < arr.length; i++) {
  79. System.out.print(arr[i] + " ");
  80. }
  81. System.out.println();
  82. }
  83.  
  84. // for test
  85. public static void main(String[] args) {
  86. int testTime = 500000;
  87. int maxSize = 100;
  88. int maxValue = 100;
  89. boolean succeed = true;
  90. for (int i = 0; i < testTime; i++) {
  91. int[] arr1 = generateRandomArray(maxSize, maxValue);
  92. int[] arr2 = copyArray(arr1);
  93. insertionSort(arr1);
  94. comparator(arr2);
  95. if (!isEqual(arr1, arr2)) {
  96. succeed = false;
  97. break;
  98. }
  99. }
  100. System.out.println(succeed ? "Nice!" : "Fucking fucked!");
  101.  
  102. int[] arr = generateRandomArray(maxSize, maxValue);
  103. printArray(arr);
  104. insertionSort(arr);
  105. printArray(arr);
  106. }
  107.  
  108. }

  

插入排序Java版的更多相关文章

  1. 内部排序比较(Java版)

    内部排序比较(Java版) 2017-06-21 目录 1 三种基本排序算法1.1 插入排序1.2 交换排序(冒泡)1.3 选择排序(简单)2 比较3 补充3.1 快速排序3.2 什么是桶排序3.3 ...

  2. 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

    常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...

  3. 常见排序算法题(java版)

    常见排序算法题(java版) //插入排序:   package org.rut.util.algorithm.support;   import org.rut.util.algorithm.Sor ...

  4. 剑指offer题解(Java版)

    剑指offer题解(Java版) 从尾到头打印链表 题目描述 输入一个链表,按从尾到头的顺序返回一个ArrayList. 方法1:用一个栈保存从头到尾访问链表的每个结点的值,然后按出栈顺序将各个值存入 ...

  5. 《算法导论》第二章demo代码实现(Java版)

    <算法导论>第二章demo代码实现(Java版) 前言 表示晚上心里有些不宁静,所以就写一篇博客,来缓缓.囧 拜读<算法导论>这样的神作,当然要做一些练习啦.除了练习题与思考题 ...

  6. ArcGIS Server 10 Java 版的Rest服务手动配置方法

    Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...

  7. PetaPojo —— JAVA版的PetaPoco

    背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...

  8. 【转载】java版打字练习软件

    网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...

  9. 微博地址url(id)与mid的相互转换 Java版

    原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...

随机推荐

  1. Java 设计模式 ------ 模板设计模式

    模板设计模式主要来源于生活中有一些事情是有模板可以遵循的.举两个生活中的例子,如泡茶和泡咖啡,看一看. 泡茶有以下四个步骤:  1, 烧开水;  2 把茶放到水杯中; 3,倒入开水; 4, 加糖. 泡 ...

  2. gym-101350M

    题意:给你一堆货币汇率,再给你一堆货币,算下值多少钱: 思路:直接map搞定: #include<iostream> #include<algorithm> #include& ...

  3. Django中Form组件的使用

    Form介绍 HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...

  4. Spring 使用介绍(一)—— 概述

    一.Spring设计原则 1.约定大于配置的契约式编程 2.非侵入式设计 从框架角度可以这样理解,无需继承框架提供的类,这种设计就可以看作是非侵入式设计,如果继承了这些框架类,就是侵入设计 3.面向接 ...

  5. Codeforces Round #415 Div. 1

    A:考虑每对最大值最小值的贡献即可. #include<iostream> #include<cstdio> #include<cmath> #include< ...

  6. 洛谷P1550打井

    打井 题目 该题是一个最小生成树的好题,但是比起一般的最小生成树来说他不仅仅有各个井相连,而且还要和地下水相连,所以地下水我们也可以看成一口井. 代码 #include <bits/stdc++ ...

  7. 【AGC005F】Many Easy Problems FFT 容斥原理

    题目大意 给你一棵树,有\(n\)个点.还给你了一个整数\(k\). 设\(S\)为树上某些点的集合,定义\(f(S)\)为最小的包含\(S\)的联通子图的大小. \(n\)个点选\(k\)个点一共有 ...

  8. IDEA @Contract annotation

    IDEA @Contract annotation ----------------------------------- http://www.jetbrains.com/help/idea/con ...

  9. 【Gym - 100947G】Square Spiral Search

    BUPT 2017 summer training (for 16) #1C 题意 A new computer scientist is trying to develop a new memory ...

  10. 【Sichuan 2017D】Dynamic Graph

    题意 300个点的无环图,开始都是白色,每次改变某个节点的颜色(黑/白),问有多少对白点之间存在只有白点的路径. 题解 类似floyd,求出两点之间的路径条数.然后白到黑就删去对应路径,黑到白就增加对 ...