数据结构实验之排序二:交换排序
2017-12-24 01:28
218 查看
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
注意:数据相等时不做交换
冒泡排序和快速排序都是基于”交换”进行的排序方法,你的任务是对题目给定的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
注意:数据相等时不做交换
#include <stdio.h> #include <stdlib.h> #include <string.h> #include<iostream> using namespace std; int s[101000], s1[1001111]; int sum1, sum2; void f(int l, int r) { if(l>=r) return; int i=l, j=r; int k=s[i]; while(i<j) { while(i<j&&s[j]>=k) j--; s[i] = s[j]; if(i<j) sum1++; while(i<j&&s[i]<=k) i++; s[j] = s[i]; if(i<j) sum1++; } s[i] = k; f(l, i-1); f(i+1, r); } void g(int n) { int i, j, t; for(i=0; i<n-1; i++) { for(j=0; j<n-i-1; j++) { if(s1[j]>s1[j+1]) { sum2++; t = s1[j]; s1[j] = s1[j+1]; s1[j+1] = t; } } } } int main() { int n, i; while(~scanf("%d", &n)) { for(i=0; i<n; i++) { scanf("%d", &s[i]); s1[i] = s[i]; } sum1=0; f(0, n-1); sum2=0; g(n); printf("%d %d\n", sum2, sum1); } return 0; }
相关文章推荐
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 3399 数据结构实验之排序二:交换排序
- SDUT-3399 数据结构实验之排序二:交换排序(冒泡+快排)
- 3399-数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序
- 数据结构实验之排序二:交换排序 oj
- SDUT-3399-数据结构实验之排序二:交换排序
- 暑假集训 8.13 数据结构实验之排序二:交换排序 (冒泡 与 快排.....)