数据结构实验之排序二:交换排序

来源:互联网 发布:python 签到脚本 编辑:程序博客网 时间:2024/06/06 20:17

数据结构实验之排序二:交换排序

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic

Problem Description

冒泡排序和快速排序都是基于"交换"进行的排序方法,你的任务是对题目给定的N个(长整型范围内的)整数从小到大排序,输出用冒泡和快排对这N个数排序分别需要进行的数据交换次数。

Input

连续多组输入数据,每组数据第一行给出正整数N(N ≤ 10^5),随后给出N个整数,数字间以空格分隔。

Output

输出数据占一行,代表冒泡排序和快速排序进行排序分别需要的交换次数,数字间以1个空格分隔,行末不得有多余空格。

Example Input

849 38 65 97 76 13 27 49

Example Output

15 9

Hint

注意:数据相等时不做交换

#include <iostream>using namespace std;int sum = 0, cnt = 0;void qsort(int a[], int low, int high){    //快排if(low < high){                      //快排的递归结束条件,长度大于1int key = a[low];int i, j;i = low;j = high;while(i < j){while(i < j && a[j] >= key) j--;if(a[i] != a[j])                        //判断一下两个元素是否相等sum++;a[i] = a[j];while(i < j && a[i] <= key) i++;if(a[i] != a[j])sum++;a[j] = a[i];}a[i] = key;qsort(a, low, i-1);                  //递归进行两端的快排qsort(a, i+1, high);}}/*void bubble_sort(int a[],int n)  {              //传统的冒泡排序,时间复杂度一直为O(n2)    int i,j,t;       for(i=0;i<n-1;i++)  {          for(j=0;j<n-i-1;j++)              if(a[j]>a[j+1])  {             t=a[j];             a[j]=a[j+1];             a[j+1]=t;             cnt++;          }      }  }*/void bubble_sort(int a[], int n){            //冒泡排序int i, j, t, lastexchenge;               //标记最后交换的位置,如果是一个有序的数组,那么时间复杂度降为O(n)i = n-1;while(i > 0){lastexchenge = 0;for(j = 0; j < i; j++){if(a[j+1] < a[j]){//swap(a[j], a[j+1]);t = a[j];a[j] = a[j+1];a[j+1] = t;cnt++;lastexchenge = j;}}i = lastexchenge;}}int main(){int n, a[100005], b[100005];while(cin>>n){sum = 0;cnt = 0;for(int i = 0; i < n; i++){cin>>a[i];b[i] = a[i];}qsort(a, 0, n-1);bubble_sort(b, n);cout<<cnt<<" "<<sum<<endl;/*for(i = 0; i < n-1; i++)cout<<b[i]<<" ";cout<<b[i]<<endl;*/}return 0;}


原创粉丝点击