首页 > 代码库 > 交换类排序:冒泡,快速(递归与非递归)

交换类排序:冒泡,快速(递归与非递归)

<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;
		}
	}
}


交换类排序:冒泡,快速(递归与非递归)