<img src="https://img-blog.csdn.net/20150402214006896?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRnJhbmNlc19TaGk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
通过哈希法以空间换取时间 。
一个continue的遗漏,数组溢出,引发了一晚上的疯狂debug。。。。
#include "stdafx.h"
#include <string>
using namespace std;
struct result{
int head;
int tail;
};
void sort(int A[],int n)
{
result* s=new struct result[n+1];
for(int i=1;i<=n;i++)
{
s[i].head=0;
s[i].tail=0;
}
for(int i=0;i<n;i++)
{
if(A[i]==n)//最大的数
{
if(s[n].head==0)
{
s[n].head=n;
s[n].tail=n;
}
continue;
}
if(s[A[i]+1].head==0)//保序列中找不到和它相邻的下一个数字
{
s[A[i]].head=A[i];
s[A[i]].tail=A[i];
}
if(s[A[i]+1].head!=0)//保序列中找到和它相邻的下一个数字
{
s[A[i]].head=A[i];
s[A[i]].tail=s[A[i]+1].tail;
s[A[i]+1].head=0;
s[A[i]+1].tail=0;
}
/*else if(s[A[i]+1].head==-1)
{
int k=A[i]+1;
while(s[k].head)
}*/
}
for(int i=1;i<=n;i++)
{
if(s[i].head!=0)
{
for(int k=s[i].head;k<=s[i].tail;k++)
printf("%d ",k);
printf("\n");
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int A[10]={1,2,5,8,10,4,3,6,9,7};
sort(A,10);
return 0;
}