在数据结构中的快速排序实现,未将原数组排序为递增或递减的序列,该C语言通过指针将原数组进行了改变。
low和high的数值交换:
void Swap(int *a,int *b) { int p=*b; *b=*a; *a=p; }
Partition(分区函数):通过内层while可看出快速排序不是稳定排序算法
int Partition(int *arr,int low,int high) { int *pivot=&arr[low]; while(low<high) { while(low<high&&arr[high]>*pivot) high--; while(low<high&&arr[low]<*pivot) low++; Swap(&arr[low],&arr[high]); } Swap(pivot,&arr[low]); return low; }
QuickSort函数:
void QuickSort(int arr[],int low,int high) { if(low<high) { int pivotpos=Partition(arr,low,high); QuickSort(arr,low,pivotpos-1); QuickSort(arr,pivotpos+1,high); } }
完整代码:
#include <stdio.h> void Swap(int *a,int *b) { int p=*b; *b=*a; *a=p; } int Partition(int *arr,int low,int high) { int *pivot=&arr[low]; while(low<high) { while(low<high&&arr[high]>*pivot) high--; while(low<high&&arr[low]<*pivot) low++; Swap(&arr[low],&arr[high]); } Swap(pivot,&arr[low]); return low; } void QuickSort(int arr[],int low,int high) { if(low<high) { int pivotpos=Partition(arr,low,high); QuickSort(arr,low,pivotpos-1); QuickSort(arr,pivotpos+1,high); } } int main() { int arr[10]={3,5,4,7,6,8,9,1,0,2}; int i; for(i=0;i<10;i++) printf("%d",arr[i]); printf("\n"); QuickSort(arr,0,9); for(i=0;i<10;i++) printf("%d",arr[i]); return 0; }
标签:arr,实现,high,int,while,low,排序,快速 From: https://www.cnblogs.com/simpleset/p/17790170.html