【算法设计与分析】 快速排序 递归与分治
【问题描述】每次划分时都以最后一个元素为划分基准,使用快速排序算法对若干整数进行排序,其中分解函数PARTITION以课件中的算法(1)为准。
【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔。
【输出形式】输出递归函数调用的次数,以及从小到大的排序结果。
【样例输入】
复制代码
1
248 38 65 97 76 13 27
【样例输出】
复制代码
1
2
39 13 27 38 48 65 76 97
【样例说明】
输入:7个整数,以空格分隔。
输出:第一行输出递归函数QUICKSORT调用的次数为9。第二行输出从小到大的排序结果,以空格分隔。
Python代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25def partition(a,l,r): i=l-1 for j in range(l,r): if a[j]<a[r]: i+=1 a[i],a[j]=a[j],a[i] a[i+1],a[r]=a[r],a[i+1] return i+1 def quicksort(a,l,r): global time time+=1 if l<r: m=partition(a,l,r) quicksort(a,l,m-1) quicksort(a,m+1,r) a=[int(i) for i in input().split(" ")] n=len(a) time=0 quicksort(a,0,n-1) print(time) for i in range(n): print(a[i],end=" ")
C++代码:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53#include <iostream> #include <cstdio> #include <sstream> using namespace std; void swap(int &a,int &b) { if(a==b) return; a=a^b; b=a^b; a=a^b; } int partition(int a[],int l,int r)//隔板 { int i=l-1; for(int j=l;j<r;j++) if(a[j]<a[r]) { i++; swap(a[i],a[j]); } swap(a[i+1],a[r]); return i+1; } void quicksort(int a[],int l,int r,int &time)//快排 { time++; if(l<r) { int m=partition(a,l,r); quicksort(a,l,m-1,time); quicksort(a,m+1,r,time); } } int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); stringstream ss; string s; getline(cin,s); ss<<s; int n=0,t,a[1005],time=0; while(ss>>t) a[n++]=t; quicksort(a,0,n-1,time); cout<<time<<endl; for(int i=0;i<n;i++) cout<<a[i]<<" "; return 0; }
最后
以上就是眼睛大水杯最近收集整理的关于【算法设计与分析】 快速排序 递归与分治的全部内容,更多相关【算法设计与分析】内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复