| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1192 人关注过本帖
标题:#小弟刚刚接触C++,还请个位大虾请教。。。
只看楼主 加入收藏
wangxinkai
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-3-16
收藏
 问题点数:0 回复次数:10 
#小弟刚刚接触C++,还请个位大虾请教。。。
如果拿链表实现:
插入排序,
冒泡排序,
选择排序,
交换排序,
这几种排序方法,该怎么实现呢,小弟初来乍到,不懂的很多,还请个位大虾们,讲解下。
搜索更多相关主题的帖子: 大虾 
2008-03-16 18:32
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
我自己写的链表:



#include <windows.h>

struct node
{
    int data;
    node *next;
};


node *getone(node *n, int pos)
{
    node *ret = n;
    for(int i = 0; i < pos; i++)
    {
        if(ret == NULL)return NULL;
        ret = ret->next;
    }
    return ret;
}

node *getend(node *n)
{
    node *ret = n;
    while(ret->next != NULL)
        ret = ret->next;

    return ret;
}

//////////////////////////////////////////////////////////////////////////
class CNode
{
private:
    node *m_list;

    void insertnode(node *add, int pos)
    {
        node *n1 = m_list, *n2 = NULL, *n3 = NULL;
        if(pos <= 0)
        {
            m_list = add;
            m_list->next = n1;
        }
        else
        {
            n2 = getone(m_list, pos - 1);
            n3 = getone(m_list, pos);
            n2->next = add;
            add->next = n3;
        }
    }
public:
    CNode()
    {
        m_list = NULL;
    }
    void add(int val, int pos)
    {
        node *addn = new node;
        addn->data = val;
        addn->next = NULL;
        insertnode(addn, pos);
    }

    void del(int pos)
    {
        node *tmp = getone(m_list, pos);
        if(pos <= 0)m_list = tmp->next;
        else
            getone(m_list, pos - 1)->next = tmp->next;
        delete tmp;
    }

    int get(int pos)
    {
        node *tmp;
        tmp = getone(m_list, pos);
        return tmp->data;
    }

    int num()
    {
        if(m_list == NULL)return 0;
        int cnt = 0;
        node *tmp = m_list;
        while(tmp->next != NULL)
        {
            tmp = tmp->next;
            cnt++;
        }
        return cnt + 1;
    }
};

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-03-16 20:31
wangxinkai
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-3-16
收藏
得分:0 
谢谢。。。可我要的是,内几种排序方法,链表的。。。。
2008-03-16 20:34
Ethip
Rank: 5Rank: 5
等 级:贵宾
威 望:15
帖 子:771
专家分:0
注 册:2008-1-18
收藏
得分:0 
回复 1# 的帖子
你一定看过数据结构的书了,那书上应该有相应算法的啊,自己去实现一下下,就OK了!
2008-03-16 20:52
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
CNode n;
n.add(18,0);
n.add(20,0);
输出排列:
20
18

这个add函数就是用来插入的,它会在pos位置插入个值,不会覆盖掉原来的值。
del是用来删除一个节点的。
至于其他的算法,你可以根据我的CNode类自己写呀,还要都给你写好来啊?

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-03-16 20:53
wangxinkai
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-3-16
收藏
得分:0 
数上都是数组。。。。。

我合计拿链表写成类。。。。

以后要用的时候也方便么。。。。。
2008-03-16 21:42
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
自己尝试封装啊..然后如果有问题..可以一起讨论啊..

学习需要安静。。海盗要重新来过。。
2008-03-16 21:45
wangxinkai
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-3-16
收藏
得分:0 
能写出来就不问了。
2008-03-16 21:53
wangxinkai
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-3-16
收藏
得分:0 
冒泡;
void BubbleSort(int* pData,int Count)
{
  int iTemp;
  for(int i=1;i<Count;i++)
  {
    for(int j=Count-1;j>=i;j--)
    {
      if(pData[j]<pData[j-1])
      {
        iTemp = pData[j-1];
        pData[j-1] = pData[j];
        pData[j] = iTemp;
      }
    }
  }
}

void main()
{
  int data[] = {10,9,8,7,6,5,4};
  BubbleSort(data,7);
  for (int i=0;i<7;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}
交换;
void ExchangeSort(int* pData,int Count)  
{
  int iTemp;
  for(int i=0;i<Count-1;i++)
  {
    for(int j=i+1;j<Count;j++)
    {
      if(pData[j]<pData[i])
      {
        iTemp = pData[i];
        pData[i] = pData[j];
        pData[j] = iTemp;
      }
    }
  }
}

void main()
{
  int data[] = {10,9,8,7,6,5,4};
  ExchangeSort(data,7);
  for (int i=0;i<7;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}
选择;
void SelectSort(int* pData,int Count)
{
  int iTemp;
  int iPos;
  for(int i=0;i<Count-1;i++)
  {
    iTemp = pData[i];
    iPos = i;
    for(int j=i+1;j<Count;j++)
    {
      if(pData[j]<iTemp)
      {
        iTemp = pData[j];
        iPos = j;
      }
    }
    pData[iPos] = pData[i];
    pData[i] = iTemp;
  }
}

void main()
{
  int data[] = {10,9,8,7,6,5,4};
  SelectSort(data,7);
  for (int i=0;i<7;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}

插入;
void InsertSort(int* pData,int Count)
{
  int iTemp;
  int iPos;
  for(int i=1;i<Count;i++)
  {
    iTemp = pData[i];
    iPos = i-1;
    while((iPos>=0) && (iTemp<pData[iPos]))
    {
      pData[iPos+1] = pData[iPos];
      iPos--;
    }
    pData[iPos+1] = iTemp;
  }
}

void main()
{
  int data[] = {10,9,8,7,6,5,4};
  InsertSort(data,7);
  for (int i=0;i<7;i++)
    cout<<data[i]<<" ";
  cout<<"\n";
}


拿数组能写,拿链表就蒙了。。。。。
2008-03-16 21:55
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
原理一样 ,某些算法用链表更简单,比如快排
有些又更复杂,比如插入

我也值实现过这两个,其他的自己想,数组会写,那么链表绝对没问题,前提是你理解那个过程

Fight  to win  or  die...
2008-03-17 00:06
快速回复:#小弟刚刚接触C++,还请个位大虾请教。。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026947 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved