首先是各个功能函数的声明
#ifndef __FUNC_H__
#define __FUNC_H__
//冒泡排序
void mao_sort(int arr[],int n);
//选择排序
void xuan_sort(int arr[],int n);
//插入排序
void cha_sort(int arr[],int n);
//快速排序
int part(int arr[],int low,int high);
void quick_sort(int arr[],int low,int high);
#endif
下面是各个功能函数的具体代码
#include<stdio.h>
#include<stdlib.h>
#include"./func.h"
//冒泡排序
void mao_sort(int arr[],int n)
{
int i;
int j;
int temp;
int flag;
for(i=1;i<n;i++)
{
flag=0;
for(j=0;j<n-i;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
flag=1;
}
}
if(flag==0)
{
break;
}
}
printf("冒泡升序排序后:>>");
for(i=0;i<n;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
}
//选择排序
void xuan_sort(int arr[],int n)
{
int i;
int j;
int temp;
int min;
for(i=0;i<n;i++)
{
min=i;
for(j=i+1;j<n;j++)
{
if(arr[min]>arr[j])
{
min=j;
}
}
if(min != i)
{
temp=arr[min];
arr[min]=arr[i];
arr[i]=temp;
}
}
printf("选择升序排序后:>>");
for(i=0;i<n;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
}
//插入排序
void cha_sort(int arr[],int n)
{
int i;
int j;
int temp;
for(i=1;i<n;i++)
{
int temp=arr[i]; //先找到一个值
for(j=i;j>0&&temp<arr[j-1];j--)
{
arr[j]=arr[j-1];
}
arr[j] = temp;
}
printf("插入升序排序后:>>");
for(i=0;i<n;i++)
{
printf("%d\t",arr[i]);
}printf("\n");
}
//快速排序
int part(int arr[],int low,int high)
{
int i;
int x=arr[low]; //选定基准
while(low<high) //防止只执行一轮后结束
{
while(arr[high]>=x && low<high) //low<high 防止错位
{
high--;
}
arr[low] = arr[high];
while(arr[low]<=x && low<high)
{
low++;
}
arr[high]=arr[low];
}
arr[low] =x;
return low;
}
void quick_sort(int *arr,int low,int high)
{
int mid; //接受基准所在位置
if(low<high)
{
mid =part(arr,low,high); //此时得到基准所在位置
quick_sort(arr,low,mid-1); //对左边进行快排
quick_sort(arr,mid+1,high); //对右边进行快排
}
}
最后是主函数内的调用部分
#include<stdio.h>
#include<stdlib.h>
#include"./func.h"
int main(int argc, const char *argv[])
{
int i;
int arr[50];
int n;
printf("请输入存放的数的个数:>>");
scanf("%d",&n);
for(int i=0;i<n;i++)
{
printf("请输入第%d个数:>>",i+1);
scanf("%d",&arr[i]);
}
//调用冒泡排序实现升序
mao_sort(arr,n);
//调用选择排序实现升序
xuan_sort(arr,n);
//调用插入排序实现排序
cha_sort(arr,n);
//调用快排实现升序
quick_sort(arr,0,n);
printf("快排升序排序后:>>");
for(i=0;i<n;i++)
{
printf("%d\t",arr[i]);
}
return 0;
}