李师兄给大家安排了新的内容,我这周的工作是看算法与数据结构。
今天看了第二节了,是快速排序的东西,在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;

// }

//}
//

今天看了第二节了,是快速排序的东西,在C下实现了两个小算法。记录下来以备后用。


































































































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





















































