快速排序(C/C++)

C

#include<stdio.h>

void quicksort(int left,int right,int a[])
{
    
    
	if(left>=right)//不满足条件,数组长度为一,直接返回数组 
	return;
	
	int i,j,base,t;//base为基准点 
	
	i=left;
	
	j=right;
	
	base=a[i];//令数组最左端为基准值 
	
	while(i<j)//在i,j相遇之前一直循环 
	{
    
    
		while(a[j]>=base&&i<j)
		j--;
		
		while(a[i]<=base&&i<j)
		i++;
		
		if(a[j]<base||a[j]>base&&i<j)//满足条件,交换两值 
		{
    
    
			t=a[i];
			a[i]=a[j];
			a[j]=t; 
		}
	}
	a[left]=a[i];
	
	a[i]=base;//转置基准点 
	
	quicksort(left,i-1, a);//递归调用 
	
	quicksort(i+1,right, a);
	
}
int main() 
{
    
    
	int a[]={
    
    5,1,9,6,3,2,8,4,7,0};
	
	int len=sizeof(a)/sizeof(a[0]);
	
	int i=0,j=len-1;
	
	quicksort(i,j,a);
	
	for(int k=0;k<len;k++)
	{
    
    
		printf("%d ",a[k]);
	}
}

运行结果
在这里插入图片描述

C++(1)

#include<iostream>

#include<vector>

using namespace std;

void quicksort(int left,int right,int a[])
{
    
    
	if(left>right)//不满足条件,数组长度为一,直接返回数组 
	return;
	
	int i,j,base,t;//base为基准点 
	
	i=left;
	
	j=right;
	
	base=a[i];//令数组最左端为基准值
	
	while(i<j)//在i,j相遇之前一直循环 
	{
    
    
		while(a[j]>=base&&i<j)
		j--;
		while(a[i]<=base&&i<j)
		i++;
		if(a[j]<base||a[j]>base&&i<j)//满足条件,交换两值 
		{
    
    
			t=a[i];
			a[i]=a[j];
			a[j]=t; 
		}
	}
	a[left]=a[i];
	
	a[i]=base;//转置基准点 
	
	quicksort(left,i-1, a);//递归调用 
	
	quicksort(i+1,right, a);
}
int main() 
{
    
    
	int a[]={
    
    5,1,9,6,3,2,8,4,7,0};
	
	int len=sizeof(a)/sizeof(a[0]);
	
	int i=0,j=len-1;
	
	quicksort(i,j,a);
	
	for(int k=0;k<len;k++)
	{
    
    
		cout<<a[k]<<" ";
	}
}

C++(2)

#include<iostream>

#include<vector>

#include<string>

using namespace std;

void quicksort(int left,int right,vector<int>&a)
{
    
    
	if(left>right)//不满足条件,数组长度为一,直接返回数组 
	return;
	int i,j,base,t;//base为基准点 
	
	i=left;
	
	j=right;
	
	base=a[i];//令数组最左端为基准值
	
	while(i<j)//在i,j相遇之前一直循环 
	{
    
    
		while(a[j]>=base&&i<j)
		j--;
		while(a[i]<=base&&i<j)
		i++;
		if(a[j]<base||a[j]>base&&i<j)//满足条件,交换两值 
		{
    
    
			t=a[i];
			a[i]=a[j];
			a[j]=t; 
		}
	}
	a[left]=a[i];
	
	a[i]=base;//转置基准点 
	
	quicksort(left,i-1, a);//递归调用 
	
	quicksort(i+1,right, a);
}
int main() 
{
    
    
	int c[]={
    
    5,4,6,2,8,1,3,7,0,9};
	
	int len=sizeof(c)/sizeof(c[0]);
	
	vector<int>a(c,c+len);
	
	int i=0,j=len-1;
	
	quicksort(i,j,a);
	
	for(vector<int>::iterator it=a.begin();it!=a.end();it++)
	{
    
    
		cout<<*it<<" ";
	}
}

运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_59708493/article/details/121317827