![4ec8118945aa3f0fcf3181272784efb3.png](https://i-blog.csdnimg.cn/blog_migrate/5691eb3a5e7ff571759a3f7c834c005a.jpeg)
#include <stdio.h>
#define N 6
void insertsort(int [],int);
void show(int[],int);
void bubblesort(int[],int);
void selectsort(int[],int);
int main()
{
int arr[N]={7,4,-2,19,13,6};
printf("初始序列:n");
show(arr,N);
printf("n选择排序后:n");
selectsort(arr,N);
show(arr,N);
printf("n直接插入排序后:n");
insertsort(arr,N);
show(arr,N);
printf("n冒泡排序法后:n");
bubblesort(arr,N);
show(arr,N);
return 0;
}
void insertsort(int arr[],int num)
{
int i,j,temp;//temp用来存放插入数的值,i为插入数,j为有序数列的值
for(i=1;i<num;i++)
{
temp=arr[i];//寄存插入数
j=i-1;
while(temp<arr[j]&&j>=0)
{
arr[j+1]=arr[j];//将有序数组内大于插入值后移
j--;//判断更前面的数是否也大于插入数
}
arr[j+1]=temp;//暂存数放入有序序列中
}
}
void bubblesort(int arr[],int num)
{
int i,j;//i控制趟数,j控制比较次数,无论大小都进行比较
int temp;
for(i=0;i<num-1;i++)
{
for(j=0;j<num-i-1;j++)
{
if(arr[j]>arr[j+1])
{
temp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=temp;
}
}
}
}
void selectsort(int arr[],int num)
{
int i,j;
int temp;//临时存储
int k;//选择最小值的下标
for(i=0;i<num;i++)//i此时存储每个未排序好的第一个值的下标
{
k=i;//让未排序好的第一个值为选择最小值的下标
for(j=i+1;j<num;j++)//遍历未排序好的数值
{
if(arr[j]<arr[k])//选出最小值
{
k=j;//找到真正最小值的下标
}
}
if(k!=i)//选择值的下标与未排序好的序列的第一个值下标不一致
{
temp=arr[k];//让最小值与存储每个未排序好的第一个值互换使得第一个值为最小值
arr[k]=arr[i];
arr[i]=temp;
}
}
}
void show(int arr[],int num)
{
int i;
for(i=0;i<num;i++)
{
printf("%d ",arr[i]);
}
}