C语言实现快速排序法

#include <stdio.h>

void Quick_sort(int a[],int left,int right)
{
    
    
	int i=left,j=right;
	int center = a[(i+j)/2];  //这一步一定要是这样
							// 【而不能是center = (i+j)/2,后面再判断a[i] < a[center]】 
	int tran;
	
	while(i <= j)
	{
    
    
		while(a[i] < center)
		{
    
    
			i++;
		}
		while(a[j] > center)
		{
    
    
			j--;
		}
		if(i<=j)
		{
    
    
			tran = a[i];
			a[i] = a[j];
			a[j] = tran;
			i++;j--;
		}
	}
	if(left < j)
	{
    
    
		Quick_sort(a,left,j);
	}
	if(i < right)
	{
    
    
		Quick_sort(a,i,right);
	}
 } 
 
 int main()
 {
    
    
 	int m; 
	printf("请输入要创建的数组元素个数:");
	scanf("%d",&m);
	int u[m];
	
	for(int i=0; i<m; i++)
	{
    
    	
		int h;
		printf("请输入第%d个元素的值:",i+1);
		scanf("%d",&h);
		u[i] = h;
	}
	
	Quick_sort(u,0,m-1);
	
	for(int i=0; i<m;i++)
	{
    
    
		printf("%d ",u[i]);
	}
 }
 
 

运行结果

在这里插入图片描述

错误示范

#include <stdio.h>

void Quick_sort(int a[],int left,int right)
{
    
    
	int i=left,j=right;
	int center = (i+j)/2;      //如果这里这样写.......
	int tran;
	
	while(i <= j)
	{
    
    
		while(a[i] < a[center])		//这个a[center]是会随着后面多次重新排序而改变的,而导致排序出错
		{
    
    
			i++;
		}
		while(a[j] > a[center])
		{
    
    
			j--;
		}
		if(i<=j)
		{
    
    
			tran = a[i];
			a[i] = a[j];
			a[j] = tran;
			i++;j--;
		}

猜你喜欢

转载自blog.csdn.net/The_RedMaple/article/details/109137415
今日推荐