几种常用的排序算法(冒泡排序,快速排序,选择排序)

在如今大数据时代,数据处理显得尤为重要。今天在这里给大家介绍两种常见的排序算法:冒泡排序、快速排序、选择排序。

(1)冒泡排序

基本思路:

如果要对n个数进行冒泡排序,一一比较,则需要比较n-1次,在第一次比较中需要两两比较n-1次,在第j此比较中要两两比较n-j次;所以,只需两个for循环即可实现此算法。

代码如下:

#include<stdio.h>
void Fun(int arr[])
{
    
     
	int i,j;
	int temp;
	for(i=0;i<10;i++)
		for(j=0;j<9;j++)
			if(arr[j]<arr[j+1])
			{
    
    
				temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
			for(int i=0;i<10;i++)
			{
    
    
				printf("%d ",arr[i]);
			}
}
int main()
{
    
    
	int arr[]={
    
    8,5,4,3,8,7,9,5,3,2};           //定义10个长度的数组存放数据,实例化十个参数
	Fun(arr);
	return 0;
}

运行结果如下:

在这里插入图片描述

(2)快速排序

基本思路:

在待排序的n个数据中,取第一个作为基准值,将所有的数据分成三组。第一组中所有的数据值均小于或等于第二组基准值,第三组中的所有数据值均大于或等于第二组基准值。这就完成了第一次划分,对第一组和第三组重复上述方法,直到每组中只有一个数据为止。

代码如下:

#include<stdio.h>                             //快排
void quicksort(int arr[],int start,int end)
{
	int i,j;
	i=start;
	j=end;
	arr[0]=arr[start];
	while(i<j)
	{
		while(i<j && arr[0]<arr[j])
			j--;
		if(i<j)
		{
			arr[i]=arr[j];
			i++;
		}
		while(i<j && arr[i]<=arr[0])
			i++;
		if(i<j)
		{
			arr[j]=arr[i];
			j--;
		}
	}
	arr[i]=arr[0];
	if(start<i)
		quicksort(arr,start,j-1);
	if(i<end)
		quicksort(arr,j+1,end);
}
int main()
{
	int i;
	int arr[11];
	for(i=1;i<=10;i++)
	{
		scanf_s("%d",&arr[i]);
	}
	quicksort(arr,1,10);
	for(int i=1;i<=10;i++)
	{
		printf("%d ",arr[i]);
	}
	puts("");
	return 0;
}

代码运行结果如下:

在这里插入图片描述

(3)选择排序

代码如下:

#include<stdio.h>                                //选择排序
void Fun(int *arr,int len)
{
	int min;
	int i;
	for( i=0;i<len;i++)
	{
		 min=i;                                               //找到初始值min
		for(int j=i+1;j<len;j++)
		{
			if(arr[j]<arr[min])                           //比较min和j的大小
				min=j;
		}
		if(min!=i)
		{
			int temp=arr[i];                               //
			arr[i]=arr[min];
			arr[min]=temp;
		}
	}
	
}
int main()
{
	
	int arr[]={4,3,5,6,2,7,6,9,8,1};                              //测试用例 (1,2,3,4,5,6,6,7,8,9)
	int len= sizeof(arr)/sizeof (arr[0]);                       //求数组长度
	Fun(arr,10);                                               //调用Fun函数
	for(int i=0;i<len;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

运行结果如下:

在这里插入图片描述
希望对你有所帮助!

猜你喜欢

转载自blog.csdn.net/Gunanhuai/article/details/88846045