記一下學習的三種簡單排序算法
- 冒泡排序
冒泡排序也算是最經典的了,也是比較簡單的,就是將相鄰的兩個相比較,直接上代碼吧:
#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作爲參數來輸出比較次數和調換次數來比較一下效率,總的來說,直接插入排序好一點吧,當然了,也是分一些情況的。
最後,新年快樂!