一、氣泡排序
相信氣泡排序大家都知道,無非是每一趟排序時將相鄰兩個元素進行交換,根據從大到小或從小到大的順序,交換起來略有不同,如此進行n-1次排序即可得到整個陣列有序。
1、平均時間複雜度為o(n^2)
2、最好情況下時間複雜度為o(n),此時設定標誌位,元素有序時直接退出
3、最壞之間複雜度為o(n^2)
4、空間複雜度為o(1)
**實現:
/*
*進行陣列的氣泡排序
*/#include
#define maxsize 100
/* *進行氣泡排序
*/void bubblesort(int a , int
length) ;
/* *進行元素的交換
*/void swap(int
*a , int
*b) ;
/* *進行陣列的顯示
*/void displayarray(int a , int
length) ;
void main()
printf("before sort... \n") ;
displayarray(a , length) ;
bubblesort(a , length) ;
printf("after sort... \n") ;
displayarray(a , length) ;
}void bubblesort(int a , int
length)}}
}void swap(int
*a , int
*b)void displayarray(int a , int
length)
printf("\n") ;
}
二、快速排序
快速排序即從陣列中選擇乙個標誌位,將比其小的元素放置在其前面,比其大的元素放置在其後面,然後將兩邊的前面的陣列與後面的陣列部分做同樣的置換,直至元素有序即可。
1、平均時間複雜度為o(nlogn)
2、最好時間複雜度為o(nlogn)
3、最壞時間複雜度為o(n^2),此時元素基本有序
4、空間複雜度為o(logn)
**實現
/*
*進行陣列的快速排序
*/#include
#define maxsize 100
/* *快速排序演算法
*/void quicksort(int a , int low , int high) ;
/* *進行一趟排序
*返回值為中間值的下標
*/int quickpass(int a ,int low , int high) ;
/* *進行陣列的顯示
*/void displayarray(int a , int length) ;
void main()
printf("before sort... \n") ;
displayarray(a , length) ;
quicksort(a , 0 , length - 1) ;
printf("after sort... \n") ;
displayarray(a , length) ;
}void quicksort(int a , int low , int high)
}int quickpass(int a , int low , int high)
if(low < high)
while(low < high && a[low] < temp)
if(low < high)
}a[low] = temp ;
return low ;
}void displayarray(int a , int length)
printf("\n") ;
}
交換排序之 氣泡排序(c c )
氣泡排序是很有名的排序演算法,經常會被人們提到,是一種較為常見的排序方法。顧名思義,它是將數按照一定順序給篩選出來。假定為公升序,該演算法將多次訪問數列,第一次將最大數放置到末尾,第二次將次大數放置到倒數第二位,依次類推,直至排序結束。它每一次都能將乙個數放到排序後它應該在的最終位置,待排序數會越來...
交換排序之氣泡排序
大學學的演算法已經基本遺忘了,最近又重新撿起來好好鑽研一下,那麼就先從排序開始。先說交換排序中的氣泡排序,這個是比較基礎的乙個排序演算法。1 基本思想 在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即 每當兩相鄰的數比較...
交換排序之氣泡排序
氣泡排序演算法的基本思想是 假設待排序表長為n,從前往後 或從後往前 兩兩比較相鄰元素的值,若為逆序 即a i 1 a i 則交換它們,直到序列比較完。我們成它為一趟冒泡,結果將最大 最小 的元素交換到待排序列的最後乙個位置。下一趟冒泡時,前一趟確定的最大元素不再參與比較,待排序列減少乙個元素,每趟...