#include<stdio.h>
//一定要返回划分好的两个段的中间界,所以需要返回值为int
int part(int a[],int left,int right)
{
int p=a[left];
while(left<right)
{
while(left<right&&a[right]>=p)
--right;
a[left]=a[right];
while(left<right&&a[left]<=p)
left++;
a[right]=a[left];
}
a[left]=p;
return left;
}
void qsort(int a[],int left,int right)
{
if(left<right){
int pos=part(a,left,right);
qsort(a,left,pos-1);
qsort(a,pos+1,right);
}
}
int main()
{
int n;
int i,j;
int buf[101];
while(scanf("%d",&n)!=EOF){
for(i=1;i<=n;i++)
{
scanf("%d",&buf[i]);
}
//冒泡排序
/*
for(i=0;i<n;i++){
for (j=0;j<n-1-i;j++){
if (buf[j]>buf[j+1]){
tem=buf[j];
buf[j]=buf[j+1];
buf[j+1]=tem;
}
}
}*/
//插入排序法,设置哨兵,j赋初值
/*
for(i=2;i<=n;i++)
{
if(buf[i]<buf[i-1]){
buf[0]=buf[i];
//j的初值为i-1
for(j=i-1;buf[0]<buf[j];j--){
buf[j+1]=buf[j];
}
buf[j+1]=buf[0];
}
}
*/
//快速排序
qsort(buf,1,n);
for(i=1;i<=n;i++)
{
printf("%d ",buf[i]);
}
printf("\n");
}
return 0;
}
//一定要返回划分好的两个段的中间界,所以需要返回值为int
int part(int a[],int left,int right)
{
int p=a[left];
while(left<right)
{
while(left<right&&a[right]>=p)
--right;
a[left]=a[right];
while(left<right&&a[left]<=p)
left++;
a[right]=a[left];
}
a[left]=p;
return left;
}
void qsort(int a[],int left,int right)
{
if(left<right){
int pos=part(a,left,right);
qsort(a,left,pos-1);
qsort(a,pos+1,right);
}
}
int main()
{
int n;
int i,j;
int buf[101];
while(scanf("%d",&n)!=EOF){
for(i=1;i<=n;i++)
{
scanf("%d",&buf[i]);
}
//冒泡排序
/*
for(i=0;i<n;i++){
for (j=0;j<n-1-i;j++){
if (buf[j]>buf[j+1]){
tem=buf[j];
buf[j]=buf[j+1];
buf[j+1]=tem;
}
}
}*/
//插入排序法,设置哨兵,j赋初值
/*
for(i=2;i<=n;i++)
{
if(buf[i]<buf[i-1]){
buf[0]=buf[i];
//j的初值为i-1
for(j=i-1;buf[0]<buf[j];j--){
buf[j+1]=buf[j];
}
buf[j+1]=buf[0];
}
}
*/
//快速排序
qsort(buf,1,n);
for(i=1;i<=n;i++)
{
printf("%d ",buf[i]);
}
printf("\n");
}
return 0;
}
本文介绍了一个使用C语言实现的快速排序算法。通过递归地选择一个基准元素并对数组进行划分,该实现能够有效地对整数数组进行排序。文章提供了一个完整的代码示例,包括输入输出流程,展示了快速排序的基本思想及其在实际应用中的高效性。
5435

被折叠的 条评论
为什么被折叠?



