在如今大数据时代,数据处理显得尤为重要。今天在这里给大家介绍两种常见的排序算法:冒泡排序、快速排序、选择排序。
(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;
}
运行结果如下:
希望对你有所帮助!