您的位置:首页 > 其它

快速排序和堆排序

2012-05-31 21:57 176 查看
快速排序:

#include <iostream>
using namespace std;

int n[5] = {4,3,1,5,2};
void quickSort(int s, int t);
int sort(int s, int t);

int main()
{
quickSort(0,4);
for (int i=0;i<5;i++) cout<<n[i];
return 0;
}

void quickSort(int s, int t)
{
if(s>=t) return;
int k = sort(s, t);
quickSort(s,k-1);
quickSort(k+1,t);
return;
}

int sort(int s, int t)
{
int key = n[s];
while(s<t)
{
while(n[t]>=key&&t>s) t--;
n[s] = n[t];
s++;
while(n[s]<=key&&t>s) s++;
n[t] = n[s];
t--;
}
n[s] = key;
return s;
}


堆排序

#include <iostream>
using namespace std;

int n[10] = {5,1,4,9,8,7,6,2,10,3};
int l = 10;

void creatHeap();
void backHeap(int t);

int main()
{
creatHeap();
int i;
for (i=1;i<=l;i++)
{
cout<<n[0];
n[0] = n[l-i];
backHeap(l-i);
}
return 0;
}

void creatHeap()
{
int i;
for (i=l/2;i>=1;i--)
{
if (2*i==l||n[2*i-1]>n[2*i])
{
if (n[i-1]<n[2*i-1])
{
int temp = n[2*i-1];
n[2*i-1] = n[i-1];
n[i-1] = temp;
}
}
else if (n[2*i-1]<=n[2*i])
{
if (n[i-1]<n[2*i])
{
int temp = n[2*i];
n[2*i] = n[i-1];
n[i-1] = temp;
}
}
}
}

void backHeap(int t)
{
int i;
for (i=1;i<=t/2;i++)
{
if (2*i==t||n[2*i-1]>n[2*i])
{
if (n[i-1]<n[2*i-1])
{
int temp = n[2*i-1];
n[2*i-1] = n[i-1];
n[i-1] = temp;
}
}
else if (n[2*i-1]<=n[2*i])
{
if (n[i-1]<n[2*i])
{
int temp = n[2*i];
n[2*i] = n[i-1];
n[i-1] = temp;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐