概述
【算法设计与分析】 快速排序 递归与分治
【问题描述】每次划分时都以最后一个元素为划分基准,使用快速排序算法对若干整数进行排序,其中分解函数PARTITION以课件中的算法(1)为准。
【输入形式】在屏幕上输入若干整数,各数间都以一个空格分隔。
【输出形式】输出递归函数调用的次数,以及从小到大的排序结果。
【样例输入】
48 38 65 97 76 13 27
【样例输出】
9
13 27 38 48 65 76 97
【样例说明】
输入:7个整数,以空格分隔。
输出:第一行输出递归函数QUICKSORT调用的次数为9。第二行输出从小到大的排序结果,以空格分隔。
Python代码:
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++代码:
#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;
}
最后
以上就是眼睛大水杯为你收集整理的【算法设计与分析】 快速排序 递归与分治的全部内容,希望文章能够帮你解决【算法设计与分析】 快速排序 递归与分治所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复