C++中的快排

來源:互聯網
上載者:User

演算法的思想,將要排序的鏈表分成兩部分A和B,A中初始放入鏈表中的第一個元素,B為鏈表中的剩餘元素。將B中的元素一次插入A中,並排好順序,直到B中元素為空白。

代碼奉上= =、

#include <iostream>
using namespace std;
struct Node{
int element;
Node *next;
};
Node *h = NULL;
struct ANode{
int element;
ANode *next;
};
ANode *head = NULL;
bool insert(int a,Node *&h){
int click = 0;
Node *p ;
p = new Node;
p->element = a;
if (h ==NULL)
{
h = p;
p->next = NULL;
click = 1;
}else{
Node *qn ;
qn = h;
while (qn->next!=NULL)
{
qn = qn->next;
}
qn->next = p;
p->next = NULL;
click = 1;
}
if (click ==0)
{
return false;
}else
return true;
}

ANode *sort(Node *&h){
Node *q = h;
ANode *p;
p = new ANode;
p->element = q->element;
head = p;
h = h->next;
p->next = NULL;
delete q;
while (h!=NULL)
{
Node *q = h;
ANode *p,*p1 = head,*p2 = head;
p = new ANode;
p->element = q->element;
while ((p->element>p1->element)&&(p1->next!=NULL))
{
p2 = p1;
p1 = p1->next;
}
if (p->element<p1->element)
{
if (p1==head)
{
head = p;
p->next = p1;
h = h->next;
delete q;
}else{
p2->next = p;
p->next = p1;
h = h->next;
   delete q;
}
}
else if (p->element ==p1->element)
{
if (p1==head)
{
head = p;
p->next = p1;
h = h->next;
delete q;
}else{
p2->next = p;
p->next = p1;
h = h->next;
delete q;
}
}
else if (p1->next ==NULL)
{
p1->next = p;
p->next = NULL;
h = h->next;
delete q;
}
}
return head;
}
void main(){
int a;
bool t;
int i=0;
while(true)
{
char ch;
cout<<"請輸入要插入的數值:";
cin>>a;
t=insert(a,h);
if(t)
cout<<"插入成功"<<endl;
else
cout<<"插入失敗"<<endl;
cout<<"要繼續插入嗎?(y/n)";
cin>>ch;
if(ch=='N'||ch=='n')
break;//break的作用是退出包含它的最內層迴圈
}
Node *q=h;
cout<<"鏈表的元素依次為:"<<endl;
while(q->next!=NULL)
{
cout<<q->element<<' ';
q=q->next;
}
cout<<q->element<<endl;
head=sort(h);
ANode *q1=head;
cout<<"排序後的鏈表元素依次為:"<<endl;
while(q1->next!=NULL)
{
cout<<q1->element<<' ';
q1=q1->next;
}
cout<<q1->element<<endl;
}

感覺這個代碼主要是要理清楚演算法。

然後想到了程式=資料結構+演算法這句話的真諦、

晚安晚安,碎告碎告咯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.