#include<iostream>
#include<stack>
#include<queue>
using namespace std;
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode *partion(ListNode *low, ListNode*high)
{
ListNode * i;
ListNode * pos = low;
int key = low->val;
for (i = low->next; i != high; i = i->next)
{
if (i->val <= key)
{
pos = pos->next;
swap(i->val,pos->val);
}
}
swap(pos->val,low->val);
return pos;
}
void qsort(ListNode*head, ListNode*tail)
{
if(head != tail && head->next != tail)
{
ListNode* mid = partion(head, tail);
qsort(head, mid);
qsort(mid->next, tail);
}
}
ListNode* sortList(ListNode* head) {
if (head == NULL || head->next == NULL)
return head;
qsort(head,NULL);
return head;
}
};
int main()
{
//int a[3] = {1,2,3};
//int b[3] = {1,2,3};
ListNode *a,*b,*c,*d,*e,*f;
a = new ListNode(1);
b = new ListNode(2);
c = new ListNode(-1);
d = new ListNode(1);
e = new ListNode(3);
f = new ListNode(4);
a->next = b;
b->next = c;
c->next = d;
d->next = e;
e->next = f;
Solution s;
ListNode * res = s.sortList(a);
while(res)
{
cout << res->val;
res = res->next;
}
cout << endl;
return 0;
}
来个非链表的
#include<iostream>
using namespace std;
typedef bool(*cmp_fun)(int, int);
bool cmp_func_dec(int a, int b)
{
return (a > b);
}
bool cmp_func_asc(int a, int b)
{
return (a < b);
}
int partion(int arr[],int low,int high,cmp_fun func)
{
int key = arr[low];
int pos = low;
int i;
for (i=low+1; i<high; i++)
{
if (func(arr[i],key))
{
pos++;
swap(arr[i],arr[pos]);
}
}
swap(arr[pos],arr[low]);
return pos;
}
void qsort(int arr[],int start,int end1,cmp_fun func)
{
if (end1 <= start)return;
int pos = partion(arr,start,end1,func);
qsort(arr,start,pos,func);
qsort(arr,pos+1,end1,func);
}
int main()
{
int a[5] = {1,1,2,1,3};
cout <<"sort asc:";
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<" "<<a[4]<<" ==> ";
qsort(a,0,5,cmp_func_asc);
cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<" "<<a[3]<<" "<<a[4]<<endl;
}