AOJ/初等排序习题集
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/初等排序习题集的更多相关文章
- AOJ/高等排序习题集
ALDS1_5_B-MergeSort. Description: Write a program of a Merge Sort algorithm implemented by the follo ...
- 贪心+拓扑排序 AOJ 2456 Usoperanto
题目传送门 题意:给出一条链,比如x连到y,x一定要在y的左边,且代价是这条链经过的点的权值和,问如何排序使得代价最小 分析:类似拓扑排序,先把入度为0的点入队,把指向该点的所有点按照权值排序,保证这 ...
- AOJ/数据结构习题集
ALDS1_3_A-Stack. Description: Write a program which reads an expression in the Reverse Polish notati ...
- AOJ/搜索递归分治法习题集
ALDS1_4_A-LinearSearch. Description: You are given a sequence of n integers S and a sequence of diff ...
- AOJ/树二叉搜索树习题集
ALDS1_7_A-RootedTree. Description: A graph G = (V, E) is a data structure where V is a finite set of ...
- AOJ/堆与动态规划习题集
ALDS1_9_A-CompleteBinaryTree. Codes: //#define LOCAL #include <cstdio> int parent(int i) { ret ...
- AOJ/树与二叉搜索树习题集
ALDS1_7_A-RootedTree. Description: A graph G = (V, E) is a data structure where V is a finite set of ...
- AOJ/搜索与递归及分治法习题集
ALDS1_4_A-LinearSearch. Description: You are given a sequence of n integers S and a sequence of diff ...
- 数据结构与算法之PHP排序算法(归并排序)
一.基本思想 归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,使每个子序列有序,再将已有序的子序列合并,得到完全有序的序列.该算法是采用分治法(Divid ...
随机推荐
- Java容器源码解析之——ArrayList
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess ...
- 在Ubuntu Linux下制作Windows 启动安装 USB盘
最近想 ,在Ubuntu上刻录个windows的安装U盘,在网上看了些资料,不过好多都说的很模糊,于是乎,我走了不少弯路.这里记录下来,希望了帮到大家. 首先你的有个USB吧,这里我们假定USB在ub ...
- iOS PureLayout使用
PureLayout是iOS Auto Layout的终端API,强大而简单.由UIView.NSArray和NSLayoutConstraint类别组成.PureLayout为大多数Auto Lay ...
- PDO(20161107)
PDO MySQLI是针对MySQL数据库扩展的,是专门访问MySQL数据库的 PDO是一个数据库访问的一个扩展类,通过一个类访问多个数据库,就是一个数据访问抽象层,把类结合在一块了 可以访问别的数据 ...
- Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别
Class.getResourceAsStream() 会指定要加载的资源路径与当前类所在包的路径一致. 例如你写了一个MyTest类在包com.test.mycode 下,那么MyTest.clas ...
- sqrt()平方根计算函数的实现2——牛顿迭代法
牛顿迭代法: 牛顿迭代法又称为牛顿-拉夫逊方法,它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法.多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特 ...
- netsh导入导出IPSec配置策略
首先提一句: ipsec规则中,filter action为允许的比拒绝的优先级要高,其它的没有顺序关系,经测试验证! 参考:http://tech.techweb.com.cn/thread-354 ...
- 自适应滤波——线性预测(LPC)
作者:桂. 时间:2017-03-26 10:12:07 链接:http://www.cnblogs.com/xingshansi/p/6621914.html 声明:欢迎被转载,不过记得注明出处哦 ...
- Emmet 快速编写html代码
简介 快速编写HTML代码 语法简单,语法类似css选择器,30分钟内你就可以搞定它.开发商为sublime.atom.brackets.hbuilder.webstrom等编辑器或IDE提供对应的插 ...
- 20. Valid Parentheses - 括号匹配验证
Description: Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determin ...