排序算法

来源:互联网 发布:苹果5s怎么设置3g网络 编辑:程序博客网 时间:2024/05/17 21:49
排序算法有很多(参考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);    }}


原创粉丝点击