排序源码(待续)
#include <stdio.h>
void exchange(int &a,int &b){
a = a^b;
b = a^b;
a = a^b;
}
void printout(int a[],int n){
for(int i=0;i<n;i++){
printf("%5d ",a[i]);
}
}
//直接选择排序
void selectSort(int a[],int n){
int i,j;
for(i=0;i<n;i++){
for(j=i+1;j<n;j++){
if(a[i]>a[j]){
exchange(a[i],a[j]);
}
}
}
printout(a,n);
}
//冒泡排序
void bubbleSort(int a[],int n){
int i,j;
for(i=0;i<n-1;i++){
for(j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
exchange(a[j],a[j+1]);
}
}
}
printout(a,n);
}
//建大顶堆
void heapAdjust(int a[],int s,int l){
int tag = s; //保存当前正在比较的父节点
for(int j=2*s+1;j<=l;j = 2*j+1){
if(j<l && a[j]<a[j+1]){
j++;
}
if(a[tag] < a[j]){
exchange(a[tag],a[j]);
tag = j;
}else{
break;
}
}
}
//堆排序
void heapSort(int a[],int n){
int i;
//建大顶堆
for(i=((n-2)>>1);i>=0;i--){
heapAdjust(a,i,n-1);
}
//进行堆排序,并每次将堆节点放到最后一位,即将当前堆最大值放到最后
for(i=n-1;i>0;--i){
exchange(a[0],a[i]);
heapAdjust(a,0,i-1);
}
printout(a,n);
}
//快速排序
void subSort(int a[],int low,int high){
int temp = a[low];
int i=low,j=high;
if(i<j){
while(true){
while(i < j && a[j]>=temp){
j--;
}
while(i < j && a[i]<=temp){
i++;
}
if(i<j)
exchange(a[i],a[j]);
else
break;
}
exchange(a[low],a[i]);
subSort(a,low,i-1);
subSort(a,i+1,high);
}
}
void quickSort(int a[],int n){
subSort(a,0,n-1);
printout(a,n);
}
int main()
{
int a[] ={3,1,2,9,5};
// selectSort(a,3);
printout(a,5);
printf("\ntest:");
//bubbleSort(a,3);
// heapSort(a,6);
quickSort(a,5);
return 0;
}