zoukankan      html  css  js  c++  java
  • 选择排序

    链表选择排序

    #include<iostream>
    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<n;i++)
    	{
    		p=new LNode;
    		cin>>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<<p->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->data<r->data)  _____________;
    //       _________;
    // 	 }
    //      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<<"排序后:
    ";			//输出合并后的单链表Lc
    	output(L);
    	cout<<endl;
    	return 0;
    }
    
    

    基本选择排序

    //算法8.5 快速排序
    #include <iostream>
    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<high)
    	{										//从表的两端交替地向中间扫描
    		while(low<high&&L.r[high].key>=pivotkey) --high;
    		L.r[low]=L.r[high];					//将比枢轴记录小的记录移到低端
    		while(low<high&&L.r[low].key<=pivotkey) ++low;
    		L.r[high]=L.r[low];					//将比枢轴记录大的记录移到高端
    	}//while
    	L.r[low]=L.r[0];						//枢轴记录到位
    	return  low;							//返回枢轴位置
    }//Partition
    
    void QSort(SqList &L,int low,int high)
    {	//调用前置初值:low=1; high=L.length;
        //对顺序表L中的子序列L.r[low..high]做快速排序
    	int pivotloc;
        if(low<high)
    	{										//长度大于1
           pivotloc=Partition(L,low,high); 		//将L.r[low..high]一分为二,pivotloc是枢轴位置
           QSort(L,low,pivotloc-1);				//对左子表递归排序
           QSort(L,pivotloc+1,high);        	//对右子表递归排序
    	}
    }											//QSort
    
    void QuickSort(SqList &L)
    {
       //对顺序表L做快速排序
       QSort(L,1,L.length);
    }											//QuickSort
    								
    void Create_Sq(SqList &L)
    {
    	int i,n;
    	cout<<"请输入数据个数,不超过"<<MAXSIZE<<"个。"<<endl;
    	cin>>n;											//输入个数
    	cout<<"请输入待排序的数据:
    ";
    	while(n>MAXSIZE)
    	{
    		cout<<"个数超过上限,不能超过"<<MAXSIZE<<",请重新输入"<<endl;
    		cin>>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<<L.r[i].key<<endl;
    }
    
    
    void main()
    {
    	SqList L;
    	L.r=new ElemType[MAXSIZE+1];
    	L.length=0;
    	Create_Sq(L);
    	QuickSort(L);
    	cout<<"排序后的结果为:"<<endl;
    	show(L);
    }
    
    ♪(^∇^*)♪(^∇^*)(~ ̄▽ ̄)~有没有感觉很棒呀!!!(#^.^#),(*^▽^*)O(∩_∩)O哈哈~
  • 相关阅读:
    Python—re模块
    Python—json模块
    Python—sys模块介绍
    Python—os模块介绍
    Python—randonm模块介绍
    Python—time模块介绍
    Python—包介绍
    Python—模块介绍
    Python—装饰器
    jvm、jre、jdk
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12063792.html
Copyright © 2011-2022 走看看