原文轉自:http://blog.csdn.net/morewindows/article/details/6657829
1:算法分析中比較經典的當屬於排序算法,最早接觸的是選擇排序和冒泡排序;但是這兩種算法的效率都不是很高,通過計算可以得知時間複雜度都爲O(n的平方)
冒泡排序非常容易理解和實現的;
設數組長度爲N。
1.比較相鄰的前後二個數據,如果前面數據大於後面的數據,就將二個數據交換。
2.這樣對數組的第0個數據到N-1個數據進行一次遍歷後,最大的一個數據就“沉”到數組第N-1個位置。
3.N=N-1,如果N不爲0就重複前面二步,否則排序完成。
void Bubblesort_1(int a[],int n)
{
int i,j,temp;
for(i=1;i<n;i++)
{
for(j=0;j<n-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
上述算法的缺點就是,如果一個數組已經有序,仍然需要這麼多的比較計算,因此可以做如下改進:
void Bubblesort_2(int a[],int n)
{
int i,j,temp;
bool flag=1;
i=n;
while(flag)
{
flag=false;
for(j=0;j<i-1;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=true;
}
}
i--;
}
}
選擇排序的原理也十分簡單,就是現在a[0]~a[n-1]找到最小值然後與a[0]交換,然後在進行一次排序在a[1]~a[n-1]找到最小值與a[1]交換,直到排序完成; 代碼如下:
void Select_sort(int a[],int n)
{
int i,j;
int m;
int temp;
for(i=0;i<n-1;i++)
{
m=i;
for(j=i+1;j<n;j++)
{
if(a[m]>a[j])
{
temp=a[j];
a[j]=a[m];
a[m]=temp;
}
}
}
}