排序算法:快排、堆排、归并

快排:

基本原理思想:

1:取标准。

2:从尾部看,大于则减减。小于,则把j位置的值给i位置,并把i++;

3:从头部看,小于则加加。大于,则把i位置的值给j位置,并把j--;

4:把base赋值给最后一个i位置。

5:递归调用。

代码:

#include <iostream>
using namespace std;

int findBaseIndex(int a[],int l,int r)
{
    if(l<r)
	{
	    int base=a[l];
		int i=l,j=r;
		while(i<j)
		{
		    while(a[j]>base && i<j)
				j--;
			if(i<j)
			{
			    a[i]=a[j];
				i++;
			}
			else
				break;
			while(a[i]<base && i<j)
				i++;
			if(i<j)
			{
			    a[j]=a[i];
				j--;
			}
			else
				break;
		}
		a[i]=base;
		return i;
	}
}

void quickSort(int a[],int l,int r)
{
	if(l<r)
	{
        int index=findBaseIndex(a,l,r);
		if(index>l)
		    quickSort(a,l,index-1);
		if(index<r)
			quickSort(a,index+1,r);
	}
}

int main()
{
	int a[]={20,59,4,93,47,1,37};
	int len=sizeof(a)/sizeof(a[0]);
	int l=0,r=len-1;
	quickSort(a,l,r);
	for(int i=0;i<len;i++)
	{
	    cout<<a[i]<<" ";
	}
    return 0;
}  

过程中犯下的错误:溢出。ij的值一直控制不好。

猜你喜欢

转载自www.cnblogs.com/westlife-11358/p/9369006.html