【C语言】冒泡、选择、快速排序算法设计与实现

155 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

【算法】冒泡、选择、快速排序算法设计与实现

一、目的

掌握算法的概念和问题的求解过程。

二、实验内容

用多种不同方式解决n个整数的排序问题。

三、设计和编码

1.算法伪代码

1.1冒泡排序

输入:无序数组a[],数组元素个数n
输出:有序数组a[n]
1.定义exchange的初值为n-1
2.判断exchange的值不为0时
2.1 设置最大值bound为exchange的值
2.2 如果r[j]>r[j+1]
2.3 将exchange值与r[j]交换

1.2选择排序

输入:无序数组a[],数组元素个数n
输出:有序数组a[n]
1.定义index的初值为r[i],j=i+1
2.判断r[j]<r[index]时
2.1 将r[j]与r[index]的值进行交换

1.3快速排序

输入:无序数组a[],数组首地址序号first,末地址序号end
输出:有序数组a[n]
1.判断首地址序号first小于末地址序号end时
1.1 如果first<end && a[first]<=a[end],end--
1.1.1 交换a[first]与a[end]的值,first++
1.2 如果first<end && a[first]<=a[end],end++
1.2.1 交换a[first]与a[end]的值,first--

2.程序代码

2.1冒泡排序

#include<stdio.h>
void BubbleStort(int r[],int n)
{
	int bound,exchange=n-1;
	while(exchange!=0)
	{
		bound=exchange;
exchange=0;
		for(int j=0;j<bound;j++)
		if(r[j]>r[j+1])
		{
			int temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
			exchange=j;
		}
	}
}

2.2选择排序

void SelectSort(int r[],int n)
{
	int i,j,index,temp;
	for(i=0;i<n-1;i++)
	{
		index=i;
		for(j=i+1;
j<n;j++)
		if(r[j]<r[index]) index=j;
		if(index!=i)
		{
			temp=r[i];
			r[i]=r[index];
			r[index]=temp;
		}
	}
}

2.3快速排序

int Partition(int r[],int first,int end)
{
	int i=first,j=end;
	while(i<j)
	{
		while(i<j&&r[i]<=r[j]) j--;
		if(i<j)
		{
			int temp=r[i];r[i]=r[j];r[j]=temp;
			i++;
		}
		while (i<j&&r[i]<=r[j]) i++;
		if(i<j)
		{
			int temp=r[i];r[i]=r[j];r[j]=temp;
			j--;
		}
	}
	return i;
	
}

2.4输出(主函数)

void putnum(int r[],int n)
{
	int i;
	printf("输出序列:");
	for(i=0;i<n;i++)
	printf("%d ",r[i]);
}
int main()
{
	int a[6]={30,8,7,45,5,24};
	printf("输入序列:30 8 7 45 5 24\n");
	BubbleStort(a,6); //冒泡排序
	putnum(a,6);
//	SelectSort(a,6); //选择排序
//	Partition(a,6,1); //快速排序
//	QuickSort(a,7,2); 
}

四、运行结果及分析

4.1.结果截图

image.png

4.2.分析

我们运用冒泡排序,选择排序及快速排序成功的对所给数组进行了排序。各个排序法各有其优点,在不同情况下需要用到不同的排序方法才能实现效率的最大化。