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 ...
随机推荐
- Spark Core_资源调度与任务调度详述
转载请标明出处http://www.cnblogs.com/haozhengfei/p/0593214ae0a5395d1411395169eaabfa.html Spark Core_资源调度与任务 ...
- 取出关联数组的key值和values值
取出关联数组的key值,可用 array_keys()取出; <?php $a=array("Volvo"=>"XC90","BMW&qu ...
- Broken pipe错误终极解释
叙述 想必或多或少在Java的服务器都会遇到过这种异常,如下图 由于Java偏上层,日常开发接触系统底层的机会偏少,要搞清楚什么原因导致的这种异常,肯定是先要百度google一番. 网络 ...
- php数组的使用
<?php echo "<h2>--------普通数组--------</h2>"; $arr1 = array(1,2,3,4); print_r ...
- rem 结合 scss 移动端自适应 初级入门demo
首先说明 本篇 内容 适合初级使用 rem 开发移动端 自适应 公式计算 推导过程, 高手绕路. 目标尺寸 = rem * 根字体大小 Px = rem * (html根字体px) 根字体大 ...
- 极客君教你破解隔壁妹子的wifi密码,成功率高达90%
首先,给大家推荐一个我自己维护的网站: 开发者网址导航:http://www.dev666.com/ 破解wifi密码听起来很复杂,实际上也不是非常的复杂,极客君(微信公众帐号:极客峰)今天教大家如何 ...
- iOS开发之视频播放
1.如何播放视频 iOS提供了MPMoviePlayerController.MPMoviePlayerViewController两个类,可以用来轻松播放视频和网络流媒体\网络音频. 提示:网络音频 ...
- 解决mac os下mcss命令报错:env: node\r: No such file or directory
标题无“转载”即原创文章,版权所有.转载请注明来源:http://besteam.im/blogs/article/31/. 我一直对字符界面有抵触感,即使会用vim,我的linux脚本(python ...
- MCMC(二)马尔科夫链
MCMC(一)蒙特卡罗方法 MCMC(二)马尔科夫链 MCMC(三)M-H采样和Gibbs采样(待填坑) 在MCMC(一)蒙特卡罗方法中,我们讲到了如何用蒙特卡罗方法来随机模拟求解一些复杂的连续积分或 ...
- 27. Remove Element - 移除元素-Easy
Description: Given an array and a value, remove all instances of that value in place and return the ...