记一下学习的三种简单排序算法
- 冒泡排序
冒泡排序也算是最经典的了,也是比较简单的,就是将相邻的两个相比较,直接上代码吧:
#include<stdio.h>
void bubblesort(int a[],int n)
{
int i,j,temp,count1=0,count2=0,flag;
flag=1;
for(i=0;i<n-1&&flag;i++)
{
for(j=n-1;j>i;j--)
{
flag=0;
count1++;
if(a[j]>a[j-1])
{
flag=1;
count2++;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
printf("比较次数为:%d,调换次数为:%d\n",count1,count2);
}
int main()
{
int a[]={0,5,6,3,8,1,2,9};
bubblesort(a,8);
int i;
for(i=0;i<8;i++)
{
printf("%d ",a[i]);
}
}
- 选择排序
选择排序就是先选择出最小的放在最前边,然后在剩下的里面在选择出最小的排到下一个。上代码:
#include<stdio.h>
void SelectSort(int a[],int n)
{
int i,j,temp,min;
for(i=0;i<n-1;i++)
{
min=i;
for(j=i+1;j<n;j++)
{
if(a[j]<a[min])
{
min=j;
}
}
if(min!=i)
{
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
}
}
int main()
{
int array[]={5,2,6,0,3,9,1,7};
SelectSort(array,8);
int i,j;
for(i=0;i<8;i++)
{
printf("%d ",array[i]);
}
}
- 直接插入排序
基本操作就是将一个无序的数列插入到有序的数列中,成为一个新的有序数列
例如 5,2,6,0,3,9,1,7
先把5看作是那个有序的数列,然后插入3 有序的数列就变成了3,5,然后再继续插入。代码:
#include<stdio.h>
void InsertSort(int a[],int n)
{
int i,j,temp;
for(i=1;i<n;i++)
{
temp=a[i]; //要插入的数
for(j=i-1;a[j]>temp;j--) //找到要插入的位置
{
a[j+1]=a[j];
}
a[j+1]=temp;
}
}
int main()
{
int array[]={5,2,6,0,3,9,1,7};
InsertSort(array,8);
int i;
for(i=0;i<8;i++)
{
printf("%d ",array[i]);
}
}
这三种排序虽然说,时间复杂度都是一样的,但是,可以加一个count1和count2作为参数来输出比较次数和调换次数来比较一下效率,总的来说,直接插入排序好一点吧,当然了,也是分一些情况的。
最后,新年快乐!