一、冒泡排序
空间复杂度:O(1)
时间复杂度:最好O(n),最坏和平均为O(n^2)
稳定性:稳定
适用性:顺序表、链表
//冒泡排序
void BubbleSort(int A[],int n){
for(i=0;i<n-1;i++){
flag=false; //本趟是否发生了交换
for(j=n-1;j>i;j--){
if(A[j]<A[j-1]){
swap(A[j-1],A[j]);
flag=true;
}
}
if(flag==false) //说明没发生交换,已经有序
return;
}
}
二、快速排序
空间复杂度:最好和平均为O(logn),最坏O(n)
时间复杂度:最好O(nlogn),最坏为O(n^2),平均接近O(nlogn)
稳定性:不稳定
适用性:顺序表
//快速排序
int Partition(int A[],int low,int high){
int pivot=A[low];
while(low<high){
while(A[high]>=pivot&&low<high) high--;
A[low]=A[high];
while(A[low]<=pivot&&low<high]) low++;
A[high]=A[low];
}
A[low]=pivot; //最终基准(枢轴)放在low所指的位置,此时low==high
return low;
}
void QuickSort(int A[],int low,int high){
if(low<high){
int pivotpos=Partition(A,low,high);
QuickSort(A,low,pivotpos-1);
QuickSort(A,pivotpos+1,high);
}
}