交换排序
冒泡排序
void BubbleSort(int A[],int n) { int i,j; for(i=0; i<n-1; i++) { bool flag=false;//表示本趟冒泡是否发生交换的标志 for(j=n-1; j>i; j--) {//一趟冒泡的过程 if(A[j-1]>A[j]) {//若为逆序 swap(A[j-1],A[j]);//交换 flag=true; } } if(flag==false)//本趟遍历后没有发生交换,说明表已经有序 return; } }
快速排序
int Partition(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;//中枢元素存放最终的位置 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); } }