1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 算法设计 分治法 快速排序 C语言实现

算法设计 分治法 快速排序 C语言实现

时间:2021-05-04 18:03:19

相关推荐

算法设计 分治法 快速排序 C语言实现

分治法 - 快速排序

题目描述

利用快速排序算法将读入的 N个数从小到大排序后输出,请勿使用std::sort

输入格式

第一行一个整数 n (1≤n≤105)。

第二行 n 个整数 ai (1≤ai≤109)。

输出格式

输出一行,为 ai 排序后的结果。

解题思路

先从数列中取出一个基准数,将比这个数大的数全放在它右边,小于这个数的数全放在左边,再对左右区间重复,直到每个区间只有一个数。

当left<right时,才开始。以temp为基准,temp=a[left],i=left,j=right

若a[j]>=temp,j-- ,从右往左扫描

若a[i]<=temp,i++,从左往右扫描

交换a[i]、a[j].

出循环后,再改变基准,然后对左右区间分别递归调用

完整代码及测试结果

#include<stdio.h>void quicksort(int left,int right,int a[]){int i,j,temp,k;if(left>right){return;}temp = a[left];i = left;j = right;while(i<j){while(a[j]>=temp && i<j)j--;while(a[i]<=temp && i<j)i++;if(i<j){k = a[i];a[i] = a[j];a[j] = k;}}a[left] = a[i];a[i] = temp;quicksort(left,i-1,a);quicksort(i+1,right,a);}int main(){int a[100000];int i=0,n;scanf("%d",&n);getchar();char temp;while(i<n){scanf("%d",&a[i]);getchar();i++;}quicksort(0,i-1,a);int j;for(j=0;j<i;j++){printf("%d ",a[j]);}return 0;}

一组测试用例及结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。