#include <stdio.h>
#include <stdlib.h>
#include <string>
////划分区间,找到最后元素的排序位置,并返回分割的点;
int Partition(int *R,int i,int j)
{
int pivot = R[i];
while(i < j)
{
while(i <j && R[j]>=pivot)///从右向左进行,找到第一个小于pivot的数并记为R[j]
j--;
if(i <j)
R[i++]=R[j];///相当于交换R【i】和R[J],然后I++;
while(i <j && R[i]<=pivot)
i++;
if( i<j )
R[j--]=R[i];///相当于交换R【i】和R[J],然后j++;
}
R[i] = pivot;
return i;
}
//排序的递归调用
void QuickSortRecursion(int *pData,int nBeging,int nEnd)
{
int i;
if(nBeging <nEnd-1)
{
i =Partition(pData,nBeging,nEnd);
QuickSortRecursion(pData,nBeging,i);
QuickSortRecursion(pData,i+1,nEnd);
}
}
void QuickSort(int *pData,int nLen)
{
QuickSortRecursion(pData,0,nLen);
}
int main()
{
int nData[8] = {49,38,65,97,76,13,27,49};
int i=0,len;
printf("排序前:\n");
for(i = 0;i <8;++i)
{
printf("%d ",nData[i]);
}
printf("\n");
QuickSort(nData,7);
printf("排序后:\n");
for(i = 0;i <8;++i)
{
printf("%d ",nData[i]);
}
printf("\n");
return 0;
}
#include <stdlib.h>
#include <string>
////划分区间,找到最后元素的排序位置,并返回分割的点;
int Partition(int *R,int i,int j)
{
int pivot = R[i];
while(i < j)
{
while(i <j && R[j]>=pivot)///从右向左进行,找到第一个小于pivot的数并记为R[j]
j--;
if(i <j)
R[i++]=R[j];///相当于交换R【i】和R[J],然后I++;
while(i <j && R[i]<=pivot)
i++;
if( i<j )
R[j--]=R[i];///相当于交换R【i】和R[J],然后j++;
}
R[i] = pivot;
return i;
}
//排序的递归调用
void QuickSortRecursion(int *pData,int nBeging,int nEnd)
{
int i;
if(nBeging <nEnd-1)
{
i =Partition(pData,nBeging,nEnd);
QuickSortRecursion(pData,nBeging,i);
QuickSortRecursion(pData,i+1,nEnd);
}
}
void QuickSort(int *pData,int nLen)
{
QuickSortRecursion(pData,0,nLen);
}
int main()
{
int nData[8] = {49,38,65,97,76,13,27,49};
int i=0,len;
printf("排序前:\n");
for(i = 0;i <8;++i)
{
printf("%d ",nData[i]);
}
printf("\n");
QuickSort(nData,7);
printf("排序后:\n");
for(i = 0;i <8;++i)
{
printf("%d ",nData[i]);
}
printf("\n");
return 0;
}