谁能仔细说说这段快速排序算法分割怎么回事
intPartition(SortDataV[],intlow,inthigh){intpivotpos=low;SortDatapivot=V[low];for(int...
int Partition ( SortData V[ ], int low, int high ) {
int pivotpos = low;
SortData pivot = V[low];
for ( int i = low+1; i <= high; i++ )
if ( V[i] < pivot ) {
pivotpos++;
if ( pivotpos != i )
Swap ( V[pivotpos], V[i] );
}
Swap ( V[low], V[pivotpos] );
return pivotpos;
} 展开
int pivotpos = low;
SortData pivot = V[low];
for ( int i = low+1; i <= high; i++ )
if ( V[i] < pivot ) {
pivotpos++;
if ( pivotpos != i )
Swap ( V[pivotpos], V[i] );
}
Swap ( V[low], V[pivotpos] );
return pivotpos;
} 展开
展开全部
快速排序的分割宗旨就是
1.在待排序序列中选定一个值 pivot
2.通过一轮快排,将小于pivot的值丢到其左边,大于pivot的值丢到其右边
3.以pivot为界,分割该序列,递归调用快排算法
int Partition ( SortData V[ ], int low, int high ) {
int pivotpos = low; //选择待排序序列的第一个数值为piovt
SortData pivot = V[low]; //得出pivot的值,存在SortData变量中
for ( int i = low+1; i <= high; i++ ) //开始循环
if ( V[i] < pivot ) { //如果遇到小于pivot的值,说明pivot的位置应该后移一位,因为已经找到一个比他小的了
pivotpos++; //pivot位置后移
if ( pivotpos != i )
Swap ( V[pivotpos], V[i] ); //交换两个值
}
Swap ( V[low], V[pivotpos] ); //交换两个值
return pivotpos; //完成排序,pivot前面都比他小,后面都比他大
}
如果你对于那两个交换是如何保证小的在前面,大的在后面有疑问的话
冷静下来手工操作一遍就明白了
1.在待排序序列中选定一个值 pivot
2.通过一轮快排,将小于pivot的值丢到其左边,大于pivot的值丢到其右边
3.以pivot为界,分割该序列,递归调用快排算法
int Partition ( SortData V[ ], int low, int high ) {
int pivotpos = low; //选择待排序序列的第一个数值为piovt
SortData pivot = V[low]; //得出pivot的值,存在SortData变量中
for ( int i = low+1; i <= high; i++ ) //开始循环
if ( V[i] < pivot ) { //如果遇到小于pivot的值,说明pivot的位置应该后移一位,因为已经找到一个比他小的了
pivotpos++; //pivot位置后移
if ( pivotpos != i )
Swap ( V[pivotpos], V[i] ); //交换两个值
}
Swap ( V[low], V[pivotpos] ); //交换两个值
return pivotpos; //完成排序,pivot前面都比他小,后面都比他大
}
如果你对于那两个交换是如何保证小的在前面,大的在后面有疑问的话
冷静下来手工操作一遍就明白了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询