一、冒泡排序
排序思想
從頭到尾,兩兩比較相鄰的兩個元素,如果順序不對,則交換順序,這樣每一次即可將參與比較中最小的找出來。
圖解
從下向上,如果array[i]<array[i-1]則進行交換,如最左側的一列,35交換-37交換-32不換-21不換-14交換-16交換。這樣就得到了第二列,循環執行。
代碼實現
/**
*
* @param array[] 要排序的數組
* length 數組長度
*/
static void bubbleSort(int array [],int length)
{
int i,j;
int change = TURE; // 用來標識之前比較過的是否已經有序
for(i=0; i<length-1 && change ; i++)
{
change = FALSE;
for(j=0; j<length-(i+1); j++)
{
if(array[j]>array[j+1])
{
int temp=array[j+1];
array[j+1]=array[j];
array[j]=temp;
change=TURE;
}
}
}
}
int main(void)
{
int a[] = { 2, 5, 3, 1, 4};
int length = sizeof a /sizeof a[0];
int i;
for (i = 0; i < length; i++)
printf("%d%s", a[i], i == length -1 ? "\n" : " ");
bubbleSort(a, length);
for (i = 0; i < length; i++)
printf("%d%s", a[i], i == length -1 ? "\n" : " ");
return 0;
}
二、快速排序
排序思想
選取一個元素值,通過比較(從數組兩側向中間比較),比該值小得交換到其左邊,大的被交換到右邊,這樣將待排序的數組分成兩部分,左側都比該元素值小,右側都比該元素值大,針對每一個部分再執行以上的過程,直到不能再分爲止。
圖解
元素選取: 每一次以該組數組的第一個值作爲被選取得元素值。一次排序後分成兩部分,左側比4小,右側比4大。不斷執行該過程
代碼實現
遞歸方式實現:
void quickSort(int array[], int length) {
if( length <= 1 ) return;
int i=0, j=length-1, temp = array[0];
while( i<j ) {
while( array[j]>temp && j>i ) j--; array[i] = array[j];
while( array[i]<=temp && i<j ) i++; array[j] = array[i];
}
array[i] = temp;
sort(array, i);
sort(array+i+1, length-i-1);
return;
}
個人網站:點擊訪問
Email : [email protected]
WeChat: