C++ 快速排序
原理
代码:
#include <iostream>
using namespace std;
int Split_Array(int array[],int left,int right)
{
/*填坑法
int index=left;
int index_value=array[left];
while(left<=right)
{
while(right>=left)
{
if(array[right]<index_value)
{
array[left]=array[right];
index=right;
left++;
break;
}
right--;
}
while(right>=left)
{
if(array[left]>index_value)
{
array[right]=array[left];
index=left;
right--;
break;
}
left++;
}
}
array[index]=index_value;
return index;
*/
//指针交换法
int index=left;
int index_value=array[left];
while(left!=right)
{
while(left<right&&array[right]>=index_value)
{
right--;
}
while(left<right&&array[left]<=index_value)
{
left++;
}
if(left<right)
{
int temp=array[left];
array[left]=array[right];
array[right]=temp;
}
}
int temp=array[left];
array[left]=index_value;
array[index]=temp;
return left;
}
void QuicSort(int array[],int left,int right)
{
if(left>=right) return;
int p=Split_Array(array,left,right);
QuicSort(array,left,p-1);
QuicSort(array,p+1,right);
}
int main()
{
cout << "please input the length of array:" << endl;
int n;
cin>>n;
int *p=new int[n];
cout << "please input the data of array:" << endl;
for(int i=0;i<n;i++)
cin>>p[i];
cout << "执行QuicSort:" << endl;
QuicSort(p,0,n-1);
for(int i=0;i<n;i++)
cout<<p[i]<<" ";
delete[]p;
return 0;
}