码迷,mamicode.com
首页 > 其他好文 > 详细

快速排序(递归及非递归算法源码)

时间:2014-05-27 02:29:55      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:c   a   int   art   算法   os   

1、 递归算法:

quicksort.cpp

#include <iostream>
using namespace std;

void Swap(int a[],int i,int j)
{
int temp=a[i];
a[i] = a[j];
a[j] = temp;
}
int Partition(int a[],int low, int high)
{
int pivot=a[low];

while(low<high)
{
while(low<high && a[high]>pivot)
high--;
Swap(a,low,high);
while(low<high&& a[low]<=pivot)
low++;
Swap(a,low,high);
}
return low;

}
int QuickSort(int a[],int low, int high)
{
int pivot;
if (low<high)
{
pivot =Partition(a,low,high);
QuickSort(a,low,pivot-1);
QuickSort(a,pivot+1,high);
}
return 0;
}
int main()
{
int a[]={4,3,6,9,7,5,1,10,2,15,8,7,6};
QuickSort(a,0,sizeof(a)/sizeof(a[0])-1);

cout<<"after quick sort:"<<endl;
for(int i=0; i<sizeof(a)/sizeof(a[0]);i++)
{
cout<<a[i]<<" ";
}
system("pause");
return 0;
}

2、非递归算法:

int QuickSort_NonRecursive(int a[],int low, int high)
{
stack<int> s;
if(low<high)
{
int mid = Partition(a,low,high);
if (low<mid-1)
{
s.push(low);
s.push(mid-1);
}
if (mid+1<high)
{
s.push(mid+1);
s.push(high);
}
while(!s.empty())
{
int h = s.top();
s.pop();
int l = s.top();
s.pop();
int m = Partition(a,l,h);
if (l<m-1)
{
s.push(l);
s.push(m-1);
}
if (m+1<h)
{
s.push(m+1);
s.push(h);
}
}
}
return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

快速排序(递归及非递归算法源码),布布扣,bubuko.com

快速排序(递归及非递归算法源码)

标签:c   a   int   art   算法   os   

原文地址:http://www.cnblogs.com/MayGarden/p/3735972.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!