第二章 算法基础 思考题2-4(逆序对)


  1 package chap02;
2
3 import static org.junit.Assert.*;
4
5 import java.util.Arrays;
6
7 import org.junit.Test;
8
9 public class ques2_4 {
10 /**
11 * 逆序对,将一个序列中的所有逆序对打印输出
12 *
13 * @author xiaojintao
14 *
15 */
16 static void printReverseOrder(int[] n) {
17 int i = 0;
18 int j;
19 while (i < n.length - 1) {
20 for (j = i + 1; j < n.length; j++) {
21 if (n[i] > n[j]) {
22 System.out.println("<" + n[i] + "," + n[j] + ">");
23 }
24 }
25 i++;
26 }
27 }
28
29 @Test
30 public void testName() throws Exception {
31 int[] a = { 2 };
32 printReverseOrder(a);
33 }
34
35 /**
36 * 修改归并排序,使之打印出序列中的所有逆序对数
37 *
38 * @param n
39 */
40 static void printReverseByMergeSort(int[] n) {
41 int start = 0;
42 int end = n.length;
43 mergeSort(n, start, end);
44 ;
45 }
46
47 @Test
48 public void test() throws Exception {
49 int[] a = { 2, 3, 8, 6, 1, 5, 4, 0 };
50 printReverseByMergeSort(a);
51 }
52
53 /**
54 * 修改的归并排序算法用于逆序对输出
55 *
56 * @param a
57 * @return
58 */
59 protected static void mergeSort(int[] a, int start, int end) {
60 if (start < end - 1) {
61 int mid = (start + end) / 2;
62 mergeSort(a, start, mid);
63 mergeSort(a, mid, end);
64 merge(a, start, mid, end);
65 }
66 }
67
68 /**
69 * 输出逆序对
70 *
71 * @param a
72 * @param b
73 * @return
74 */
75 protected static void merge(int[] n, int start, int mid, int end) {
76 int[] l = Arrays.copyOfRange(n, start, mid);
77 int[] r = Arrays.copyOfRange(n, mid, end);
78 int i = 0;
79 int j = 0;// j<mid-start
80 int k = 0;// k<end-mid
81 while (i < end - start) {
82 if (j < mid - start & k < end - mid) {
83 if (l[j] < r[k]) {
84 n[i + start] = l[j];
85 j++;
86 } else {
87 System.out.println("<" + l[j] + "," + r[k] + ">");
88 n[i + start] = r[k];
89 k++;
90 }
91 } else if (k < end - mid) {
92 n[i + start] = r[k];
93 k++;
94 } else if (j < mid - start) {
95 n[i + start] = l[j];
96 j++;
97 }
98 i++;
99 }
100 }
101 }

第二章 算法基础 思考题2-4(逆序对)

时间: 2024-12-10 06:31:53

第二章 算法基础 思考题2-4(逆序对)的相关文章

第二章 算法基础 思考题2-1

package chap02; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Random; import org.junit.Test; /*** * 在归并排序中对小数组采用插入排序 * * @author xiaojintao * */ public class ques2_1 { /** * 归并排序算法 * * @param a * @return */ static void m

《算法导论》杂记 - 第二章 算法基础

// asc void insertionSortAsc(vector<int> &v) { int len = v.size(); for (int i = 1; i < len; i++) { int key = v[i]; int j = i - 1; while (j >= 0 && v[j] > key) { v[j + 1] = v[j]; j--; } v[j + 1] = key; } } // desc void insertionS

第二章 算法入门 合并排序

在第二章中难的算法不多,接下来我会把稍微复杂一点的算法整理一下 #include <iostream> using namespace std; void mergeSort(int *A,int left,int mid,int right) { int *L=new int[mid-left+1]; int *R=new int[right-mid+1]; int i,j; for(i=0;i<mid-left+1;i++) { L[i]=A[left+i]; } for (j=0;

算法导论(Introduction to Algorithms )— 第二章 算法入门 — 2.1 插入排序

一.插入排序:INSERTION-SORT 1.适用范围: which is an efficient algorithm for sorting a small number of elements. 对于少量元素的排序,插入排序是一种高效的算法. 2.原理: Insertion sort works the way many people sort a hand of playing cards. We start with an empty left hand and the cards

鸟哥的 Linux 私房菜(服务器) 第二章 网络基础概念

鸟哥的 Linux 私房菜(服务器) @(学习笔记)[Linux|Markdown|笔记] [TOC] 第二章 网络基础概念 2.1 网络是个什么玩意儿 OSI 七层协定 分层 负责内容 Layer 1物理层Physical Layer 由于网络媒体只能传送 0 与 1 这种位串,因此物理层必须定义所使用的媒体设备之电压与讯号等, 同时还必须了解数据讯框转成位串的编码方式,最后连接实体媒体并传送/接收位串. Layer 2数据链结层Data-Link Layer 这一层是比较特殊的一个阶层,因为

九章算法 基础算法 强化算法 系统设计 大数据 安卓 leetcode 高清视频

leetcode 直播视频讲座录像 九章算法视频录像,PPT 算法班,算法强化班,Java入门与基础算法班,big data项目实战班,Andriod项目实战班 九章算法下载 九章算法面试 九章算法leetcode 九章算法答案 九章算法mitbbs 九章算法班 九章算法ppt 九章算法录像 九章算法培训 九章算法微博 leetcode 视频 九章算法偷录 算法培训 算法班课程大纲: 1 从strStr谈面试技巧与Coding Style(免费试听) 2 二分搜索与旋转排序数组 Binary S

2016.9.21 鸟哥私房菜服务器篇-第二章网络基础-总结

第二章-网络的基本概念 2.1网络 操作系统很多,比如windows/linux/os X等,这么多的操作系统(不同国家的人)如何进行网络沟通(语言交流)呢? 制定共同的标准.然后在你的系统里提供可以加入该标准的程序代码. 网络是跨平台的. 2.1.1 什么是网络 网络就是几部计算机主机或者网络打印机之类的接口设备,通过网线或者无线网络技术,将这些主机与设备连接起来,使得数据可以通过网络介质(网线或者网卡等硬件)来传输的一种方式. 以太网已经是一项公认的标准接口了,大家可以依据这个标准来开发自己

李航老师的《统计学习方法》第二章算法的matlab程序

参考了http://blog.sina.com.cn/s/blog_bceeae150102v11v.html#post % 感知机学习算法的原始形式,算法2.1参考李航<统计学习方法>书中第二章的算法P29 close allclear allclcX=[3,3;4,3;1,1];Y=[1,1,-1];%训练数据集及标记learnRate=1;%学习率Omega=zeros(1,size(X,2))b=0 %% ω和b的初值 i=1;k=0;while 1 if Y(i)*(sum(Omeg

第二章 impala基础使用

第二章 impala基本使用 1.impala的使用 1.1.impala-shell语法 1.1.1.impala-shell的外部命令参数语法 不需要进入到impala-shell交互命令行当中即可执行的命令参数 impala-shell后面执行的时候可以带很多参数: -h 查看帮助文档 impala-shell -h -r 刷新整个元数据,数据量大的时候,比较消耗服务器性能 impala-shell -r -B 去格式化,查询大量数据可以提高性能 --print_header 去格式化显示