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. 1707: [Usaco2007 Nov]tanning分配防晒霜

    1707: [Usaco2007 Nov]tanning分配防晒霜 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 548  Solved: 262[Sub ...

  2. 我的第一个webapiDemo

    最近在面试,总是被问到有没有接触过webapi 或者问webapi和MVC 的区别,今天看了看,原来如此,自己理解感觉webapi和webservice一样像是实现soa 的一种形式,也可以理解为服务 ...

  3. java关于map用来筛选的用法

    我有一个实体 PropTemplateItem{id,名称,父节点,模版id},父节点为root是定义为根节点. 例如数据: 001,颜色,root,123 002,白色,001,123 003,红色 ...

  4. 在 sublime text 上添加 Package Control

    https://packagecontrol.io/installation 打开 View > Show Consolemenu 粘贴如下文本,回车 import urllib.request ...

  5. 10分钟精通SharePoint - SharePoint升级

    类型: b2b(安装更新)和v2v(跨版本升级) 内容:二进制文件和数据库 过程:   升级前检查 - 检查场内数据,配置和自定义等等 升级准备和计划 - 根据需要和升级检查制定相应计划和准备工作   ...

  6. Android Material Design 系列之 SnackBar详解

    SnackBar是google Material Design提供的一种轻量级反馈组件.支持从布局的底部显示一个简洁的提示信息,支持手动滑动取消操作,同时在同一个时间内只能显示一个SnackBar. ...

  7. 记一次企业级爬虫系统升级改造(六):基于Redis实现免费的IP代理池

    前言: 首先表示抱歉,春节后一直较忙,未及时更新该系列文章. 近期,由于监控的站源越来越多,就偶有站源做了反爬机制,造成我们的SupportYun系统小爬虫服务时常被封IP,不能进行数据采集. 这时候 ...

  8. SQL AlawaysOn 之五:ISCSI共享磁盘

    用于存放SQL数据库 1.安装服务 2.安装完成后要求重启计算机.添加该功能要配置计算机,如果是正式服务器,那种不能关机太久的服务器,请慎用. 重启之后看到文件和储存服务,击击进去 3.看到ISCSI ...

  9. vue渐变淡入淡出轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. malloc函数及用法

    动态存储分配在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变.C语言中不允许动态数组类型.例如:int n;scanf("%d",&n);int a[n ...