数据结构实验之排序二:交换排序
2017-12-23 15:46
316 查看
Problem Description
冒泡排序和快速排序都是基于"交换"进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡和快排对这N个数排序分别需要进行的数据交换次数。
Input
连续多组输入数据,每组数据第一行给出正整数N(N ≤ 10^5),随后给出N个整数,数字间以空格分隔。
Output
输出数据占一行,代表冒泡排序和快速排序进行排序分别需要的交换次数,数字间以1个空格分隔,行末不得有多余空格。
Example Input
8 49 38 65 97 76 13 27 49
Example Output
15 9
Hint
注意:数据相等时不做交换
Author
xam#include<stdio.h> #define N 10000 int a , b ; int s1, s2; void S(int z1, int z2) { int t; t = a[z1]; a[z1] = a[z2]; a[z2] = t; s1++; } void P1(int n) { int i, flag, j; i = n; while(i > 1) { flag = 1; for(j = 1; j < i; j++) { if(a[j + 1] < a[j]) { S(j, j + 1); flag = j; } } i = flag; } } void P2(int low, int high) { int key = b[low]; int i = low, j = high; if(low >= high) { return; } while(low < high) { while(low < high && b[high] >= key) { high--; } if(b[high] < b[low]) { s2++; } b[low] = b[high]; while(low < high && b[low] <= key) { low ++; } if(b[low] > b[high]) { s2++; } b[high] = b[low]; } b[low] = key; P2(i, low - 1); P2(high + 1, j); } int main() { int n, d; while(~scanf("%d", &n)) { s1 = 0; s2 = 0; for(int i = 1; i <= n; i++) { scanf("%d", &d); a[i] = d; b[i] = d; } P1(n); P2(1, n); printf("%d ",s1); printf("%d\n", s2); } return 0; }欢迎提更好的意见
相关文章推荐
- 数据结构实验之排序二:交换排序
- SDUT-3399 数据结构实验之排序二:交换排序(冒泡+快排)
- 3399 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- SDUT 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序 oj
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 暑假集训 8.13 数据结构实验之排序二:交换排序 (冒泡 与 快排.....)
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序