我是靠谱客的博主 眼睛大水杯,这篇文章主要介绍【算法设计与分析】 快速排序 递归与分治,现在分享给大家,希望可以做个参考。

【算法设计与分析】 快速排序 递归与分治

【问题描述】每次划分时都以最后一个元素为划分基准,使用快速排序算法对若干整数进行排序,其中分解函数PARTITION以课件中的算法(1)为准。

【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔。

【输出形式】输出递归函数调用的次数,以及从小到大的排序结果。

【样例输入】

复制代码
1
2
48 38 65 97 76 13 27

【样例输出】

复制代码
1
2
3
9 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
25
def 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; }

最后

以上就是眼睛大水杯最近收集整理的关于【算法设计与分析】 快速排序 递归与分治的全部内容,更多相关【算法设计与分析】内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部