C++中的排序算法怎么写 5

求排序算法的例子或者源代码意思说下... 求排序算法的例子 或者源代码 意思说下 展开
 我来答
b_spike
2015-07-22 · TA获得超过3687个赞
知道大有可为答主
回答量:3724
采纳率:78%
帮助的人:1196万
展开全部

那我给两个吧,先给个最简单的:冒泡(起泡)排序,这个相信谁都会,原理谁都懂

void BubbleSort(int *a, int n)  
{  
    int i,j,temp;  
       
    for (i=0; i<n; i++)  
    {  
        for (j=i; j<n; j++)  
        {  
            if (a[i] > a[j]) /*升序排列,当数序不对时交换两个数*/
            {  
                temp = a[i];  
                a[i] = a[j];  
                a[j] = temp;  
            }  
        }  
    }  
}

然后是现在广泛使用的:快速排序,这是一种递归的排序算法

void sort(int *a, int left, int right)
{
    if(left >= right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/
    {
        return ;
    }
    int i = left;
    int j = right;
    int key = a[left];
      
    while(i < j)                               /*控制在当组内寻找一遍*/
    {
        while(i < j && key <= a[j])
        /*而寻找结束的条件就是,1,找到一个小于或者大于key的数(大于或小于取决于你想升
        序还是降序)2,没有符合条件1的,并且i与j的大小没有反转*/ 
        {
            j--;/*向前寻找*/
        }
          
        a[i] = a[j];
        /*找到一个这样的数后就把它赋给前面的被拿走的i的值(如果第一次循环且key是
        a[left],那么就是给key)*/
          
        while(i < j && key >= a[i])
        /*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,
        因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/
        {
            i++;
        }
          
        a[j] = a[i];
    }
      
    a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/
    sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/
    sort(a, i + 1, right);/*用同样的方式对分出来的右边的小组进行同上的做法*/
                       /*当然最后可能会出现很多分左右,直到每一组的i = j 为止*/
}

 其实你可以自己去查查资料,或者百科什么的,源码一大堆,各种排序算法都有

wooden954
2015-07-22 · TA获得超过1万个赞
知道大有可为答主
回答量:6135
采纳率:93%
帮助的人:828万
展开全部
在网上一搜一堆。
C语言书籍中也不少排序算法。最基本的算法。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式