冒泡排序和快速排序都屬於交換排序。
當快速排序爲有序的時候,快速排序將爲冒泡排序,所以快速排序比較適用於亂序的情況。
以下是冒泡排序代碼:
#include <stdio.h>
void main()
{
int i,j;
int a[]={4,53,22,44,23,1,34,51,3,785,56};
for (i=0;i<11;i++)
{
for (j=0;j<10-i;j++)
{
if (a[j]>a[j+1])
{
int tmp;
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
for (i=0;i<11;i++)
{
printf("%d ",a[i]);
}
}
快速排序代碼
#include <stdio.h>
int Partition(int A[], int p, int r)
{
int x = A[r];//選擇x=A[r]作爲主元
int i = p -1;
for(int j = p; j <= r-1; j++)
if(A[j] <= x)//假設A[i]大於x,那麼就不用移動了。第二個語句swap()將x移動到最左方,所以比x大的數都在右方。
{ //假設A[j]小於x,因爲A[i]的下標i始終小於等於j,那麼說明A[i]是大於x的值,否則便是被移動了。
i = i+1;//這樣第一個函數swap()將把大於x的A[i]與小於x的A[j]互相交換位置。
int tmp;
tmp=A[i];
A[i]=A[j];
A[j]=tmp;
}
int tmp;
tmp=A[i+1];
A[i+1]=A[r];
A[r]=tmp;
return i+1;
}
void Quick_Sort(int A[], int p ,int r)
{
if(p < r)
{
int q = Partition(A, p, r);
Quick_Sort(A, p, q-1);
Quick_Sort(A, q, r);
}
}
int main()
{
int C[12] = {4,53,22,44,23,1,34,51,3,785,56,84};
Quick_Sort(C, 0, 11);
for(int i = 0; i <= 11; i++)
printf("%d ",C[i]);
return 0;
}