冒泡排序和快速排序都属于交换排序。
当快速排序为有序的时候,快速排序将为冒泡排序,所以快速排序比较适用于乱序的情况。
以下是冒泡排序代码:
#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;
}