插入排序Java版
- package dataStructureAlgorithmReview.day01;
- import java.util.Arrays;
- /**
- * 插入排序
- * @author shundong
- *
- */
- public class Code_01_InsertionSort {
- //bigO(N^2)的时间复杂度
- public static void insertionSort(int[] arr) {
- if (arr == null || arr.length < 2) {
- 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);
- }
- }
- }
- public static void swap(int[] arr, int i, int j) {
- arr[i] = arr[i] ^ arr[j];
- arr[j] = arr[i] ^ arr[j];
- arr[i] = arr[i] ^ arr[j];
- }
- // for test
- public static void comparator(int[] arr) {
- Arrays.sort(arr);
- }
- // for test
- public static int[] generateRandomArray(int maxSize, int maxValue) {
- int[] arr = new int[(int) ((maxSize + 1) * Math.random())];
- for (int i = 0; i < arr.length; i++) {
- arr[i] = (int) ((maxValue + 1) * Math.random()) - (int) (maxValue * Math.random());
- }
- return arr;
- }
- // for test
- public static int[] copyArray(int[] arr) {
- if (arr == null) {
- return null;
- }
- int[] res = new int[arr.length];
- for (int i = 0; i < arr.length; i++) {
- res[i] = arr[i];
- }
- return res;
- }
- // for test
- public static boolean isEqual(int[] arr1, int[] arr2) {
- if ((arr1 == null && arr2 != null) || (arr1 != null && arr2 == null)) {
- return false;
- }
- if (arr1 == null && arr2 == null) {
- return true;
- }
- if (arr1.length != arr2.length) {
- return false;
- }
- for (int i = 0; i < arr1.length; i++) {
- if (arr1[i] != arr2[i]) {
- return false;
- }
- }
- return true;
- }
- // for test
- public static void printArray(int[] arr) {
- if (arr == null) {
- return;
- }
- for (int i = 0; i < arr.length; i++) {
- System.out.print(arr[i] + " ");
- }
- System.out.println();
- }
- // for test
- public static void main(String[] args) {
- int testTime = 500000;
- int maxSize = 100;
- int maxValue = 100;
- boolean succeed = true;
- for (int i = 0; i < testTime; i++) {
- int[] arr1 = generateRandomArray(maxSize, maxValue);
- int[] arr2 = copyArray(arr1);
- insertionSort(arr1);
- comparator(arr2);
- if (!isEqual(arr1, arr2)) {
- succeed = false;
- break;
- }
- }
- System.out.println(succeed ? "Nice!" : "Fucking fucked!");
- int[] arr = generateRandomArray(maxSize, maxValue);
- printArray(arr);
- insertionSort(arr);
- printArray(arr);
- }
- }
插入排序Java版的更多相关文章
- 内部排序比较(Java版)
内部排序比较(Java版) 2017-06-21 目录 1 三种基本排序算法1.1 插入排序1.2 交换排序(冒泡)1.3 选择排序(简单)2 比较3 补充3.1 快速排序3.2 什么是桶排序3.3 ...
- 排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题
常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结 ...
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- 剑指offer题解(Java版)
剑指offer题解(Java版) 从尾到头打印链表 题目描述 输入一个链表,按从尾到头的顺序返回一个ArrayList. 方法1:用一个栈保存从头到尾访问链表的每个结点的值,然后按出栈顺序将各个值存入 ...
- 《算法导论》第二章demo代码实现(Java版)
<算法导论>第二章demo代码实现(Java版) 前言 表示晚上心里有些不宁静,所以就写一篇博客,来缓缓.囧 拜读<算法导论>这样的神作,当然要做一些练习啦.除了练习题与思考题 ...
- ArcGIS Server 10 Java 版的Rest服务手动配置方法
Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...
- PetaPojo —— JAVA版的PetaPoco
背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...
- 【转载】java版打字练习软件
网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...
- 微博地址url(id)与mid的相互转换 Java版
原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...
随机推荐
- Java 设计模式 ------ 模板设计模式
模板设计模式主要来源于生活中有一些事情是有模板可以遵循的.举两个生活中的例子,如泡茶和泡咖啡,看一看. 泡茶有以下四个步骤: 1, 烧开水; 2 把茶放到水杯中; 3,倒入开水; 4, 加糖. 泡 ...
- gym-101350M
题意:给你一堆货币汇率,再给你一堆货币,算下值多少钱: 思路:直接map搞定: #include<iostream> #include<algorithm> #include& ...
- Django中Form组件的使用
Form介绍 HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...
- Spring 使用介绍(一)—— 概述
一.Spring设计原则 1.约定大于配置的契约式编程 2.非侵入式设计 从框架角度可以这样理解,无需继承框架提供的类,这种设计就可以看作是非侵入式设计,如果继承了这些框架类,就是侵入设计 3.面向接 ...
- Codeforces Round #415 Div. 1
A:考虑每对最大值最小值的贡献即可. #include<iostream> #include<cstdio> #include<cmath> #include< ...
- 洛谷P1550打井
打井 题目 该题是一个最小生成树的好题,但是比起一般的最小生成树来说他不仅仅有各个井相连,而且还要和地下水相连,所以地下水我们也可以看成一口井. 代码 #include <bits/stdc++ ...
- 【AGC005F】Many Easy Problems FFT 容斥原理
题目大意 给你一棵树,有\(n\)个点.还给你了一个整数\(k\). 设\(S\)为树上某些点的集合,定义\(f(S)\)为最小的包含\(S\)的联通子图的大小. \(n\)个点选\(k\)个点一共有 ...
- IDEA @Contract annotation
IDEA @Contract annotation ----------------------------------- http://www.jetbrains.com/help/idea/con ...
- 【Gym - 100947G】Square Spiral Search
BUPT 2017 summer training (for 16) #1C 题意 A new computer scientist is trying to develop a new memory ...
- 【Sichuan 2017D】Dynamic Graph
题意 300个点的无环图,开始都是白色,每次改变某个节点的颜色(黑/白),问有多少对白点之间存在只有白点的路径. 题解 类似floyd,求出两点之间的路径条数.然后白到黑就删去对应路径,黑到白就增加对 ...