ALDS1_1_D-MaximumProfit.
Codes:
//#define LOCAL

#include <cstdio>
#include <algorithm>
using namespace std; #define maxSize 200010
int a[maxSize]; int main()
{
#ifdef LOCAL
freopen("E:\\Temp\\input.txt", "r", stdin);
freopen("E:\\Temp\\output.txt", "w", stdout);
#endif int n;
scanf("%d", &n);
for(int i=0; i<n; ++i) scanf("%d", &a[i]); int maxv = -1e9, minv = a[0];
for(int i=1; i<n; ++i) {
maxv = max(maxv, a[i]-minv);
minv = min(minv, a[i]);
} printf("%d\n", maxv); return 0;
}
ALDS1_1_A-InsertionSort.
Description:

Write a program of the Insertion Sort algorithm which sorts a sequence A in ascending order. The algorithm should be based on the following pseudocode:

for i = 1 to A.length-1

key = A[i]

/* insert A[i] into the sorted sequence A[0,...,j-1] */

j = i - 1

while j >= 0 and A[j] > key

A[j+1] = A[j]

j--

A[j+1] = key

Note that, indices for array elements are based on 0-origin.

To illustrate the algorithms, your program should trace intermediate result for each step.

Input:

The first line of the input includes an integer N, the number of elements in the sequence.

In the second line, N elements of the sequence are given separated by a single space.

Output:

The output consists of N lines. Please output the intermediate sequence in a line for each step. Elements of the sequence should be separated by single space.

Constraints:

1 ≤ N ≤ 100

Sample Input 1:

6

5 2 4 6 1 3

Sample Output 1:

5 2 4 6 1 3

2 5 4 6 1 3

2 4 5 6 1 3

2 4 5 6 1 3

1 2 4 5 6 3

1 2 3 4 5 6

Sample Input 2:

3

1 2 3

Sample Output 2:

1 2 3

1 2 3

1 2 3

Codes:
/*#define LOCAL*/

#include <cstdio>

void trace(int a[], int n) {
for(int i=0; i<n; ++i) {
if(i) printf(" ");
printf("%d", a[i]);
}
printf("\n");
} void insertionSort(int a[], int n) {
for(int i=1; i<n; ++i) {
int j = i-1, v = a[i];
while(j>=0 && a[j]>v) {
a[j+1] = a[j];
--j;
}
a[j+1] = v;
trace(a, n);
}
} int main()
{
#ifdef LOCAL
freopen("E:\\Temp\\input.txt", "r", stdin);
freopen("E:\\Temp\\output.txt", "w", stdout);
#endif int n, a[110];
scanf("%d", &n);
for(int i=0; i<n; ++i) scanf("%d", &a[i]); trace(a, n);
insertionSort(a, n); return 0;
}
ALDS1_2_A-BubbleSort.
Description:

Write a program of the Bubble Sort algorithm which sorts a sequence A in ascending order. The algorithm should be based on the following pseudocode:

BubbleSort(A)

1 for i = 0 to A.length-1

2 for j = A.length-1 downto i+1

3 if A[j] < A[j-1]

4 swap A[j] and A[j-1]

Note that, indices for array elements are based on 0-origin.

Your program should also print the number of swap operations defined in line 4 of the pseudocode.

Input:

The first line of the input includes an integer N, the number of elements in the sequence.

In the second line, N elements of the sequence are given separated by spaces characters.

Output:

The output consists of 2 lines.

In the first line, please print the sorted sequence. Two contiguous elements of the sequence should be separated by a space character.

In the second line, please print the number of swap operations.

Constraints:

1 ≤ N ≤ 100

Sample Input 1:

5

5 3 2 4 1

Sample Output 1:

1 2 3 4 5

8

Sample Input 2:

6

5 2 4 6 1 3

Sample Output 2:

1 2 3 4 5 6

9

Codes:
//#define LOCAL

#include <cstdio>

int bubbleSort(int a[], int n) {
int counter = 0;
bool flag = 1;
for(int i=0; flag; ++i) {
flag = 0;
for(int j=n-1; j>i; --j) {
if(a[j] < a[j-1]) {
int temp = a[j]; a[j] = a[j-1]; a[j-1] = temp;
flag = 1; ++counter;
}
}
}
return counter;
} int main()
{
#ifdef LOCAL
freopen("E:\\Temp\\input.txt", "r", stdin);
freopen("E:\\Temp\\output.txt", "w", stdout);
#endif int n, counter, a[110];
scanf("%d", &n);
for(int i=0; i<n; ++i) scanf("%d", &a[i]);
counter = bubbleSort(a, n); for(int i=0; i<n; ++i) {
if(i) printf(" ");
printf("%d", a[i]);
}
printf("\n%d\n", counter); return 0;
}
ALDS1_2_B-SelectionSort.
Description:

Write a program of the Selection Sort algorithm which sorts a sequence A in ascending order. The algorithm should be based on the following pseudocode:

SelectionSort(A)

1 for i = 0 to A.length-1

2 mini = i

3 for j = i to A.length-1

4 if A[j] < A[mini]

5 mini = j

6 swap A[i] and A[mini]

Note that, indices for array elements are based on 0-origin.

Your program should also print the number of swap operations defined in line 6 of the pseudocode in the case where i ≠ mini.

Input:

The first line of the input includes an integer N, the number of elements in the sequence.

In the second line, N elements of the sequence are given separated by space characters.

Output:

he output consists of 2 lines.

In the first line, please print the sorted sequence. Two contiguous elements of the sequence should be separated by a space character.

In the second line, please print the number of swap operations.

Constraints:

1 ≤ N ≤ 100

Sample Input 1:

6

5 6 4 2 1 3

Sample Output 1:

1 2 3 4 5 6

4

Sample Input 2:

6

5 2 4 6 1 3

Sample Output 2:

1 2 3 4 5 6

3

Codes:
//#define LOCAL

#include <cstdio>

int selectionSort(int a[], int n) {
int minv, counter = 0;
for(int i=0; i<n-1; ++i) {
minv = i;
for(int j=i+1; j<n; ++j)
if(a[j] < a[minv]) minv = j;
if(i != minv) {
int t = a[minv]; a[minv] = a[i];
a[i] = t; ++counter;
}
}
return counter;
} int main()
{
#ifdef LOCAL
freopen("E:\\Temp\\input.txt", "r", stdin);
freopen("E:\\Temp\\output.txt", "w", stdout);
#endif int n, counter, a[110];
scanf("%d", &n);
for(int i=0; i<n; ++i) scanf("%d", &a[i]); counter = selectionSort(a, n);
for(int i=0; i<n; ++i) {
if(i) printf(" ");
printf("%d", a[i]);
}
printf("\n%d\n", counter); return 0;
}
ALDS1_2_C-StableSort.
Description:

Let's arrange a deck of cards. There are totally 36 cards of 4 suits(S, H, C, D) and 9 values (1, 2, ... 9). For example, 'eight of heart' is represented by H8 and 'one of diamonds' is represented by D1.

Your task is to write a program which sorts a given set of cards in ascending order by their values using the Bubble Sort algorithms and the Selection Sort algorithm respectively. These algorithms should be based on the following pseudocode:

BubbleSort(C)

1 for i = 0 to C.length-1

2 for j = C.length-1 downto i+1

3 if C[j].value < C[j-1].value

4 swap C[j] and C[j-1]

SelectionSort(C)

1 for i = 0 to C.length-1

2 mini = i

3 for j = i to C.length-1

4 if C[j].value < C[mini].value

5 mini = j

6 swap C[i] and C[mini]

Note that, indices for array elements are based on 0-origin.

Input:

The first line contains an integer N, the number of cards.

N cards are given in the following line. Each card is represented by two characters. Two consecutive cards are separated by a space character.

Output:

In the first line, print the arranged cards provided by the Bubble Sort algorithm. Two consecutive cards should be separated by a space character.

In the second line, print the stability ("Stable" or "Not stable") of this output.

In the third line, print the arranged cards provided by the Selection Sort algorithm. Two consecutive cards should be separated by a space character.

In the fourth line, print the stability ("Stable" or "Not stable") of this output.

Constraints:

1 ≤ N ≤ 36

Sample Input 1:

5

H4 C9 S4 D2 C3

Sample Output 1:

D2 C3 H4 S4 C9

Stable

D2 C3 S4 H4 C9

Not stable

Sample Input 2:

2

S1 H1

Sample Output 2:

S1 H1

Stable

S1 H1

Stable

Codes:
//#define LOCAL

#include <cstdio>

struct Card {char suit, value;};

void bubble(struct Card a[], int n) {
for(int i=0; i<n; ++i) {
for(int j=n-1; j>=i+1; --j)
if(a[j].value < a[j-1].value) {
Card t = a[j]; a[j] = a[j-1]; a[j-1] = t;
}
}
} void selection(struct Card a[], int n) {
for(int i=0; i<n; ++i) {
int minv = i;
for(int j=i+1; j<n; ++j)
if(a[j].value < a[minv].value) minv = j;
Card t = a[minv]; a[minv] = a[i]; a[i] = t;
}
} void print(struct Card a[], int n) {
for(int i=0; i<n; ++i) {
if(i) printf(" ");
printf("%c%c", a[i].suit, a[i].value);
}
printf("\n");
} bool isStable(struct Card C1[], struct Card C2[], int n) {
for(int i=0; i<n; ++i)
if(C1[i].suit != C2[i].suit) return false;
return true;
} int main()
{
#ifdef LOCAL
freopen("E:\\Temp\\input.txt", "r", stdin);
freopen("E:\\Temp\\output.txt", "w", stdout);
#endif char str[5];
int n, j = 0;
Card C1[100], C2[100]; scanf("%d", &n);
for(int i=0; i<n; ++i) {
scanf("%s", str);
C1[i].suit = C2[i].suit = str[0];
C1[i].value = C2[i].value = str[1];
} bubble(C1, n);
selection(C2, n); print(C1, n); printf("Stable\n");
print(C2, n);
if(isStable(C1, C2, n)) printf("Stable\n");
else printf("Not stable\n"); return 0;
}
ALDS1_2_D-ShellSort.
Codes:
//#define LOCAL

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
using namespace std; int l, n, A[1000000];
long long cnt;
vector<int> G; void insertionSort(int A[], int n, int g) {
for(int i=g; i<n; ++i) {
int v = A[i], j = i-g;
while(j>=0 && A[j]>v) {
A[j+g] = A[j];
j -= g; ++cnt;
}
A[j+g] = v;
}
} void shellSort(int A[], int n) {
for(int h=1;;) {
if(h > n) break;
G.push_back(h);
h = 3*h+1;
}
for(int i=G.size()-1; i>=0; --i) {
insertionSort(A, n, G[i]);
}
} int main()
{
#ifdef LOCAL
freopen("E:\\Temp\\input.txt", "r", stdin);
freopen("E:\\Temp\\output.txt", "w", stdout);
#endif scanf("%d", &n);
for(int i=0; i<n; ++i) scanf("%d", &A[i]);
cnt = 0; shellSort(A, n);
printf("%d\n", G.size());
for(int i=G.size()-1; i>=0; --i) {
printf("%d", G[i]);
if(i) printf(" ");
}
printf("\n%d\n", cnt);
for(int i=0; i<n; ++i) printf("%d\n", A[i]); return 0;
}

AOJ/初等排序习题集的更多相关文章

  1. AOJ/高等排序习题集

    ALDS1_5_B-MergeSort. Description: Write a program of a Merge Sort algorithm implemented by the follo ...

  2. 贪心+拓扑排序 AOJ 2456 Usoperanto

    题目传送门 题意:给出一条链,比如x连到y,x一定要在y的左边,且代价是这条链经过的点的权值和,问如何排序使得代价最小 分析:类似拓扑排序,先把入度为0的点入队,把指向该点的所有点按照权值排序,保证这 ...

  3. AOJ/数据结构习题集

    ALDS1_3_A-Stack. Description: Write a program which reads an expression in the Reverse Polish notati ...

  4. AOJ/搜索递归分治法习题集

    ALDS1_4_A-LinearSearch. Description: You are given a sequence of n integers S and a sequence of diff ...

  5. AOJ/树二叉搜索树习题集

    ALDS1_7_A-RootedTree. Description: A graph G = (V, E) is a data structure where V is a finite set of ...

  6. AOJ/堆与动态规划习题集

    ALDS1_9_A-CompleteBinaryTree. Codes: //#define LOCAL #include <cstdio> int parent(int i) { ret ...

  7. AOJ/树与二叉搜索树习题集

    ALDS1_7_A-RootedTree. Description: A graph G = (V, E) is a data structure where V is a finite set of ...

  8. AOJ/搜索与递归及分治法习题集

    ALDS1_4_A-LinearSearch. Description: You are given a sequence of n integers S and a sequence of diff ...

  9. 数据结构与算法之PHP排序算法(归并排序)

    一.基本思想 归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,使每个子序列有序,再将已有序的子序列合并,得到完全有序的序列.该算法是采用分治法(Divid ...

随机推荐

  1. 1574: [Usaco2009 Jan]地震损坏Damage

    1574: [Usaco2009 Jan]地震损坏Damage Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 425  Solved: 232[Subm ...

  2. Lucene实战之初体验

    前言 最早做非结构化数据搜索时用的还是lucene.net,一直说在学习java的同时把lucene这块搞一搞,这拖了2年多了,终于开始搞这块了. 开发环境 idea2016.lucene6.0.jd ...

  3. Hibernate写配置文件无提示信息解决

    把Hibernate的相关jar包引入工程后,在配置hibernate.cfg.xml时没有提示信息,对于开发人员来说,那么多标签,标签有那么多属性,全部都记住显然是不可能的,遇到这种情况是很头疼的事 ...

  4. [原创]HBase学习笔记(1)-安装和部署

    HBase安装和部署 使用的HBase版本是1.2.4 1.安装步骤(默认hdfs已安装好) # 下载并解压安装包 cd tools/ tar -zxf hbase-1.2.4-bin.tar.gz ...

  5. ad_封装_ads828

    module ad_ctrl( clk,rst_n,ad_clk, ad_data,value_x,value_y,q_sig,wren,r_addr,w_addr ); input clk; inp ...

  6. 【iOS】7.4 定位服务->3.2 地图框架MapKit 功能2:路线规划(导航)

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

  7. python3基础之整数常用的方法整理

    希望对大家学习或者使用python3能具有一定的参考价值. __abs__     #返回一个数的绝对值 >>> num3=-22 >>> num3.__abs__ ...

  8. 移动开发必须要弄明白的问题】详解Eclipse转Android Studio

    2015-12-09 13:01:244264浏览3评论 AS出来一年多了,最近才从Eclipse转到AS,但我并不觉得使用Eclipse有多落后,它们都只是一个工具而已,哪个顺手就用哪个,用得好都能 ...

  9. 6.Redis常用命令:Set

    在Redis中,我们可以将Set类型看作为没有排序的字符集合,和List类型一样,我们也可以在该类型的数据值上执行添加.删除或判断某一元素是否存在等操作.需要说明的是,这些操作的时间复杂度为O(1), ...

  10. ReactJS入门:展示数据

    由于公司开发需要,博主利用闲暇的时间对ReactJS的基础知识进行了一些粗浅的认识和了解.博主对ReactJS的学习主要来自官网(http://reactjs.cn/react/docs/thinki ...