⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quick_sort.cpp

📁 大学数据结构课用的实验程序
💻 CPP
字号:
//在双向链表上实现快速排序的递归算法。
#include<iostream.h>
struct doulinklisttp{
          int key;
		  doulinklisttp *pre;
		  doulinklisttp *next;
};
void initiate(doulinklisttp &dulist)//初始化链表
{
     dulist.next=NULL;
	 dulist.pre=NULL;
}
void create(doulinklisttp &dulist)//建立链表
{
    int n;
	doulinklisttp *p1,*p2;
	cout<<"please input some numbers\n"
		<<"ended the number list with \"-1\"\n";
	cin>>n;
    p1=new doulinklisttp;//读入第一个数,建立头结点
	p1->key=n;
	dulist.next=p1;
	p1->pre=NULL;
    cin>>n;
	while (n>=0)         //读入剩下的数字,建立完整的链表
	{
	    p2=new doulinklisttp; 
		p2->key=n;
		p2->pre=p1;
		p2->next=NULL;
		p1->next=p2;
		p1=p1->next;
		cin>>n; 
	};
}
void search(doulinklisttp dulist,doulinklisttp *&l,doulinklisttp *&h)//查找新建链表的第一个结点和尾结点
{
	 l=dulist.next; 
	 h=dulist.next;
	 while (h->next!=NULL) 
		 h=h->next;
}
void  quickpass(doulinklisttp *l,doulinklisttp *h,doulinklisttp *&i)//对链表进行第一趟排序
{      
      doulinklisttp *j;
	  int p;
      i=l;
      j=h;
      p=i->key;
      while (i!=j)
	  {
		   while ((i!=j)&&(j->key>=p))  j=j->pre;   //当当前数大于枢轴记录关键字,指针向前移
		   if (j->key<p) i->key=j->key;
           while ((i!=j)&&(i->key<=p))  i=i->next;  //当当前数小于枢轴记录关键字,指针向后移
		   if (i->key>p) j->key=i->key; 
	  } 
      i->key=p;
}
void quicksort(doulinklisttp *l,doulinklisttp *h,doulinklisttp *&i)//对整个链表第归排序
{     
     doulinklisttp *t2;
	 if (l!=h)
	  {  
		  quickpass(l,h,i);
          if (i!=l) quicksort(l,i->pre,t2);       
		  if (i!=h) quicksort(i->next,h,t2);   
	  }
}
void write(doulinklisttp dulist)
{
	doulinklisttp *w2;
	w2=dulist.next;
	while(w2!=NULL)
	{
		cout<<w2->key<<"  ";
	    w2=w2->next;
	};
	cout<<endl;
}
void main()
{
     doulinklisttp doulist,*low,*high,*q;
	 initiate(doulist);
	 create(doulist);
	 cout<<"the input number list is\n";
	 write(doulist);
	 search(doulist,low,high);
	 quicksort(low,high,q);
	 cout<<"the ordered number list is\n";
	 write(doulist);
}
// 颜骏、索利军

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -