冒泡排序:
冒泡排序的的優點是好理解,穩定,再就是空間復雜度低,不需要額外開辟數組元素的臨時保存控件,當然了,編寫起來也容易。
其算法很簡單,就是比較數組相鄰的兩個值,把大的像泡泡一樣“冒”到數組后面去,一共要執行N的平方除以2這么多次的比較和交換的操作(N為數組元素),其復雜度為Ο(n2),如圖:
266CD4AF-1468-4B13-96A7-ED25AAE9C6AA.png
main()
{
int a[5];
int i;
int j;
int k;
int temp;
for(k=0;k<5;k++)
scanf("%d",&a[k]);
for (i=0;i<5;i++)
for (j=0;j<5-i;j++)
{
if (a[j]>a[j+1])
{
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
for (i=0;i<5;i++)
{
printf("%d ",a[i]);
}
}
選擇排序:
自己能夠想得出來的排序法,思路很簡單,用打擂臺的方式,找出最大的一個元素,和末尾的元素交換,然后再從頭開始,查找第1 個到第N-1 個元素中最大的一個,和第N-1 個元素交換……其實差不多就是冒泡法的思想,但整個過程中需要移動的元素比冒泡法要少,因此性能是比冒泡法優秀的。看圖:
F1E23635-90D1-4029-B27D-8C62C3DC473E.png
void select_sort(int a[],int len)
{
int i,j,x,l;
for(i=0;i<len;i++)
{
x=a[i];
l=i;
for(j=i;j<len;j++)
{
if(a[j]<x)
{
x=a[j];
l=j;
}
}
a[l]=a[i];
a[i]=x;
}
}