//交换排序
#include<stdio.h>
#include<stdlib.h>
void BubbleSort(int A[],int n){//冒泡排序
int i,temp,flag;
for(i=0;i<n-1;i++){ //共n-1趟(一趟确定一位)
flag=0;
for(int j=n-1;j>i;j--){
if(A[j]<A[j-1]){
temp=A[j];
A[j]=A[j-1];
A[j-1]=temp;
flag=1;
}
}
if(flag==0){ //若本趟遍历后没有发生任何交换,说明已经有序
break;
}
printf("冒泡排序第%d趟结果为:",i+1);
for(int i=0;i<n;i++){
printf("%d ",A[i]);
}
printf("\n");
}
printf("\n");
}
int Partition(int A[],int low,int high){//一趟划分
int temp=A[low];
while(low<high){
while(low<high&&temp<=A[high]){
high--;
}
A[low]=A[high];
while(low<high&&temp>=A[low]){
low++;
}
A[high]=A[low];
}
A[low]=temp; //此时low=high 左边小于temp 右边大于temp
return low;
}
void QuickSort(int A[],int low,int high,int n){//快速排序
if(low<high){//跳出递归的条件
int pivotpos=Partition(A,low,high);//划分 Partition:将A划分为两个字表(确定一个元素的位置)
for(int i=0;i<n;i++){
printf("%d ",A[i]);
}
printf("\n");
QuickSort(A,low,pivotpos-1,n); //依次对两个字表进行递归排序
QuickSort(A,pivotpos+1,high,n);
}
}
int main(){
int A[]={1,4,3,2,7,6};
int n=sizeof(A)/sizeof(A[0]);
BubbleSort(A,n);
int B[]={5,1,4,3,2,7,6};
QuickSort(B,0,5,6);
return 0;
}
效果图:
上方为冒泡排序,下方为快速排序。