选择排序

链表选择排序

#include
using namespace std;

typedef struct LNode                                        //定义单链表
{
    int data;
    struct LNode *next;
}LNode,*LinkList;

void InitList_L(LinkList &L)                                //创建单链表
{
    L=new LNode;
    L->next=NULL;
}

void input(LinkList &L,int n)                               //依次往单链表L里输入数据
{
    int i;
    LinkList p,r;
    r=L;
    cout<<"请输入该表的元素:";
    for(i=0;i>p->data;
        p->next=NULL;
        r->next=p;
        r=p;
    }
}

void output(LinkList L)                                     //依次输出单链表里的每个元素
{
    int i=0;
    LNode *p;
    p=L->next;
    while(p)
    {
        if(i)
            cout<<",";
        cout<data;
        p=p->next;
        i=1;
    }
}

// void LinkedListSelectSort(LinkList head)
//  //本算法一趟找出一个关键字最小的结点,其数据和当前结点进行交换;若要交换指针,
//  //则须记下当前结点和最小结点的前驱指针
// {LinkList r,q,p=head->next;
//   int t;
//   while(p!=NULL)
//     {q=p->next;  r=p;    //设r是指向关键字最小的结点的指针
//      while (q!=NULL)
//       {if(q->datadata)  _____________;
//       _________;
//   }
//      if(r!=p) { t=r->data;r->data=p->data;p->data=t;}
//     ____________;
//   }
//
// }



void LinkedListSelectSort(LinkList head){
    LinkList save,r,p,q,s; //list指向头结点
        save = head;
        while(save->next){
                q = save->next;
                r=q;
                p=q->next;
                while(p){
                    if (p->data < q->data) //寻找值最小结点与其前驱结点
                    {
                        s = r;
                        q=p;
                    }
                    r = p;
                    p=p->next;
                }
                if (q!=save->next) //若最小结点不是第一个未排序结点
                {
                    s->next = q->next;
                    q->next = save->next;
                    save->next = q;
                } //将最小结点与前面一个链结点交换位置
                save = q;
        }
}
int main()
{
    LinkList L;
    int num;

    cout<<"请输入单链表元素个数n:";
    cin>>num;
    InitList_L(L);                                                  //La表的创建
    input(L,num);                                               //依次往单链表La里输入数据


    LinkedListSelectSort(L);                                            //将单链表La和Lb进行合并


    cout<<"排序后:\n";         //输出合并后的单链表Lc
    output(L);
    cout<

基本选择排序

//算法8.5 快速排序
#include 
using namespace std;
#define  MAXSIZE  20                    //顺序表的最大长度
typedef struct
{
    int key;
    char *otherinfo;
}ElemType;
//顺序表的存储结构                         
typedef struct
{
    ElemType *r;                                    //存储空间的基地址
    int  length;                                    //顺序表长度
}SqList;                                            //顺序表类型


int Partition(SqList &L,int low,int high)
{ 
    //对顺序表L中的子表r[low..high]进行一趟排序,返回枢轴位置
    int pivotkey;
    L.r[0]=L.r[low];                        //用子表的第一个记录做枢轴记录
    pivotkey=L.r[low].key;                  //枢轴记录关键字保存在pivotkey中
    while(low=pivotkey) --high;
        L.r[low]=L.r[high];                 //将比枢轴记录小的记录移到低端
        while(low>n;                                         //输入个数
    cout<<"请输入待排序的数据:\n";
    while(n>MAXSIZE)
    {
        cout<<"个数超过上限,不能超过"<>n;
    }
    for(i=1;i<=n;i++)
    {
        cin>>L.r[i].key;
        L.length++;
    }
}


void show(SqList L)
{
    int i;
    for(i=1;i<=L.length;i++)
        cout<

你可能感兴趣的:(选择排序)