#include<stdio.h>
int a[101],n;
void swap(int A[],int i,int j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
//事实证明快速排序的划分结果并不是唯一的 但是最终结果是唯一的
void partition1(int A[],int low,int high) {
printf("开始划分\n");
int pivot = A[low];
int i=low;
for(int j=low+1;j<=high;j++) {
if(A[j] <pivot) swap(A,++i,j);
}
swap(A,i,low);
// return i;
}
void partition2(int A[],int low,int high) {
int pivot = A[low];
while(low < high) {
while(low<high && A[high]>=pivot) --high;
A[low] = A[high];
while(low<high && A[low]<=pivot) ++low;
A[high] = A[low];
}
A[low] = pivot;
}
int main() {
int n;
printf("请输入字符数:\n");
scanf("%d",&n);
int A[n],B[n];
printf("请输入序列:");
for(int i=0;i<n;i++) {
scanf("%d",&A[i]);
}
for(int i=0;i<n;i++) {
B[i] = A[i];
}
partition1(A,0,n-1);
printf("partition1序列:\n");
for(int i=0;i<n;i++) {
printf("%d ",A[i]);
}
partition2(B,0,n-1);
printf("\npartition2序列:\n");
for(int i=0;i<n;i++) {
printf("%d ",B[i]);
}
return 0;
}
快速排序的划分结果并不唯一
最新推荐文章于 2024-05-21 19:28:59 发布