排序算法有很多(参考http://www.programfan.com/club/showtxt.asp?id=202195有代码;http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html算法介绍举例;http://c.chinaitlab.com/special/cpxsf/index.html有代码)但我们不需要全部记住,冒泡法和快速排序法是较常提到的算法,下面仅介绍这两种。
1、冒泡法排序(bubble sort)
void Bubble_Sort(int A[],int n)
{
int t,flag;
for(int i=0;i<n;i++)
{
//记录一次遍历中是否有元素的交换
flag=0;
for(int j=i+1;j<n;j++)
{
//从小到大排列
if(A[j]<A[i])
{
t=A[j];
A[j]=A[i];
A[i]=t;
flag=1;
}
}
//如果这次遍历没有元素的交换,那么排序结束
if(flag==0) break;
}
}
2、快速排序(不稳定的)
原理:快速排序采用了一种分治的策略,通常称其为分治法,其基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
快速排序的具体过程如下:
第一步,在待排序的n个记录中任取一个记录,以该记录的排序码为准,将所有记录分成两组,第1组各记录的排序码都小于等于该排序码,第2组各记录的排序码都大于该排序码,并把该记录排在这两组中间。
第二步,采用同样的方法,对左边的组和右边的组进行排序,直到所有记录都排到相应的位置为止。
//快速排序,low和high是数组的下标
void Quick_Sort(int A[],int low,int high)
{
if(low<high)
{
//取序列中的第一个元素为枢纽元素
int temp,t=A[low];
int l=low,h=high;
while(l<h)
{
//从前往后寻找,将小于枢纽元素的元素放在一个的数组中
while(A[l]<t) l++;
//从后往前寻找,将大于枢纽元素的元素放在令一个的数组中
while(A[h]>=t) h--;
//比枢纽元素大的放在后半部分,比枢纽元素小的放在前半部分
if(h>l)
{
temp=A[l];
A[l]=A[h];
A[h]=temp;
}
}
//在分割后的两部分中又分别重复上述过程
Quick_Sort(A,low,l-1);
Quick_Sort(A,l+1,high);
}
}