快速排序的两种实现
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;
// }
//}
//
今天看了第二节了,是快速排序的东西,在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;
// }
//}
//
相关文章推荐
- 快速排序 两种实现
- 快速排序lua实现 递归和栈两种实现
- 快速排序两种实现方式
- 快速排序 两种partition实现
- 快速排序的两种实现方式(Java)
- 快速排序的实现(两种)
- 快速排序,两种实现
- 快速排序的三种实现及两种优化
- 快速排序lua实现 递归和栈两种实现
- 快速排序两种方式实现及优化总结
- 快速排序的两种实现
- 快速排序的两种实现方法
- 快速排序的两种实现思路和非递归实现--C++实现
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 快速排序的两种实现
- 详谈排序算法之交换类排序(两种方法实现快速排序【思路一致】)
- 快速排序的两种实现
- 快速排序partition过程常见的两种写法+快速排序非递归实现
- 快速排序的两种实现方式,主要是Partition函数的实现原理不一样