您的位置:首页 > 其它

快速排序的两种实现

2007-04-10 22:03 411 查看
李师兄给大家安排了新的内容,我这周的工作是看算法与数据结构。
今天看了第二节了,是快速排序的东西,在C下实现了两个小算法。记录下来以备后用。


#include "stdafx.h"


using namespace std;






void run(int* pData,int left,int right)






..{




int i,j;




int middle,iTemp;




i = left;




j = right;




middle = pData[(left+right)/2]; //求中间值








while(i<=j) //如果两边扫描的下标交错,就停止(完成一次)






...{




while((pData[i]<middle) && (i<right)) //从左扫描小于中值的数 ?????????????




i++;




while((pData[j]>middle) && (j>left)) //从右扫描大于中值的数




j--;




if(i<=j)//找到了一对值






...{




//交换




iTemp = pData[i];




pData[i] = pData[j];




pData[j] = iTemp;




i++;




j--;




}




}








//当左边部分有值(left<j),递归左半边




if(left<j)




run(pData,left,j);




//当右边部分有值(right>i),递归右半边




if(right>i)




run(pData,i,right);




}








void QuickSort(int* pData,int Count)






...{




run(pData,0,Count-1);




}








void main()






...{






int data[] = ...{4,6,9,5,7,8,10};




QuickSort(data,7);




for (int i=0;i<7;i++)




cout<<data[i]<<" ";




cout<<" ";




}







下面的代码理解起来稍简单一点,但很明显速度不是最快的。








//另一种实验方法:::::::::::::::::::::::::::::::::::::::::




//#include "stdafx.h"


//using namespace std;




/**////*swap: 交换v[i],v[j]*/


//void swap(int v[], int i, int j)


//{


// int temp;


// temp=v[i];


// v[i]=v[j];


// v[j]=temp;


//}


//


//




/**////*快速排序:将数组V[]进行升序排序*/


//void quicksort(int v[], int n)


//{


// int i,last;


// if(n <= 1) /*如果数组中元素个数小于1则什么也不作*/


// return;


// swap(v, 0, rand() % n); /*选数组中最后一个元素作基准,并将基准元素移到V[0]处*/


// last = 0;


// for(i = 1; i <n ; i++)


// {


// if(v[i] < v[0])


// swap(v, ++last, i);


// }


// swap(v, 0, last);


// quicksort(v, last);


// quicksort(v+last+1, n-last-1);


//}


//


//void main()


//{




// int a[]={4,6,9,5,7,8,1};




// quicksort(a,7);




// for (int i=0;i<7;i++)




// {




// cout<<a[i]<<endl;




// }




//}


//



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: