标签:style blog http color os strong
原始序列:
取第一个元素的值作为轴点:
low指针与high指针初始时,分别指向arr[low]和arr[high],首先将轴点与high指针所指元素进行比较,若比轴点大,那么指针前移,否则将这个比轴点小的元素值复制到low指针指向的位置:
接下来,把97复制到13的位置:
此时,high指针发现97>49,前移,76>49,前移,发现low和high重合,那么循环结束,此时将轴点的值放到这个位置。
int partition(int arr[],int low,int high)
{
int val = arr[low];//以arr[low]作为轴点,val记录轴点的值
while(low < high)
{
while(low<high && arr[high] >= val)
{
high--;
}
arr[low] = arr[high];//将轴点右侧比轴点小的放到轴左边,使轴点右侧均比轴点大
while(low < high && arr[low] <= val)
{
low++;
}
arr[high] = arr[low];//将轴点左侧比轴点大的放到轴右边,使轴点左侧均比轴点小
}
arr[low] = val;
return low;//返回轴点的位置
}
void quick_sort(int arr[],int low,int high)
{
int index;//记录轴点的位置
if(low < high)
{
index = partition(arr,low,high);//先对数组整体做一次快排,使轴左侧均比轴小,轴右侧均比轴大
quick_sort(arr,low,index-1);//接着,递归对轴左边部分进行快排
quick_sort(arr,index+1,high);//递归对轴右边进行快排
}
}
/*
快速排序
by Rowandjj
2014/7/22
*/
#include<iostream>
using namespace std;
int partition(int arr[],int low,int high)
{
int val = arr[low];//以arr[low]作为轴点,val记录轴点的值
while(low < high)
{
while(low<high && arr[high] >= val)
{
high--;
}
arr[low] = arr[high];//将轴点右侧比轴点小的放到轴左边,使轴点右侧均比轴点大
while(low < high && arr[low] <= val)
{
low++;
}
arr[high] = arr[low];//将轴点左侧比轴点大的放到轴右边,使轴点左侧均比轴点小
}
arr[low] = val;
return low;//返回轴点的位置
}
void quick_sort(int arr[],int low,int high)
{
int index;//记录轴点的位置
if(low < high)
{
index = partition(arr,low,high);//先对数组整体做一次快排,使轴左侧均比轴小,轴右侧均比轴大
quick_sort(arr,low,index-1);//接着,递归对轴左边部分进行快排
quick_sort(arr,index+1,high);//递归对轴右边进行快排
}
}
int main()
{
//int arr[] = {4,2,1,6,9,11,3,5,8,10};
//int arr[] = {1,3,5,7,9,11,13,15,17,19};
int arr[] = {19,17,15,13,11,9,7,5,3,1};
int len = 10,i;
quick_sort(arr,0,len);
for(i = 0; i < len; i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
return 0;
}
标签:style blog http color os strong
原文地址:http://blog.csdn.net/chdjj/article/details/38041315