标签:
<pre name="code" class="cpp">交换类排序:1:冒泡排序O(n^2),空间复杂度O(1)
2:快速排序O(n乘以log以2为底,n的对数),空间复杂度O(log以2为底,n的对数)
//冒泡排序
void BubbleSort(int R[],int n)
{
int i,j,tmp,flag;
for(i=0;i<n-1;i++)
{
flag=0;
for(j=n-1;j>i;j--)
{
if(R[j]<R[j-1])
{
tmp=R[j];
R[j]=R[j-1];
R[j-1]=tmp;
flag=1;
}
}
if(flag==0)
return;
}
}
//快速排序
void QuickSort(int R[],int s,int t)
{
int i=s,j=t;
int tmp;
if(s<t)
{
tmp=R[s];
while(i!=j)
{
while(j>i && R[j]>tmp)
j--;
R[i]=R[j];
while(i<j && R[i]<tmp)
i++;
R[j]=R[i];
}
R[i]=tmp;//最后一个[i]给了别人,此处的值没有用了,用来存放基准值
QuickSort(R,s,i-1);
QuickSort(R,i+1,t);
}
}
//快速排序的非递归算法
void QuickSort(int R[],int n)
{
int i,j,low,high,top=-1;
int temp;
struck
{
int low;
int high;
}St[MAXITEM];
top++;
St[top].low=0;
St[top].high=n-1;
while(top>-1)
{
//出栈
low=St[top].low;
high=St[top].high;
top--;
i=low;
j=high;
if(low<high)
{
temp=R[low];
while(i!=j)
{
while(i<j && R[j]>temp)
j--;
R[i]=R[j];
while(i<j && R[i]<temp)
i++;
R[j]=R[i];
}
R[i]=temp;
//入栈
top++;
St[top].low=low;
St[top].high=i-1;
top++;
St[top].low=i+1;
St[top].high=high;
}
}
}
标签:
原文地址:http://blog.csdn.net/ndzjx/article/details/42460325