排序算法(冒泡、选择、插入、快速)

来源:互联网 发布:手机怎么开通淘宝网店 编辑:程序博客网 时间:2024/05/22 01:54

需要注意的问题:
在QuickSort中,两个while的顺序不能放反了;

#include <iostream>using namespace std;void swap(int &a,int &b ) {int t=a; a=b; b=t;}void BubbleSort(int A[], int n); //冒泡排序void SelectSort(int A[], int n); //选择排序void InsertSort(int A[], int n);  //插入排序void QuickSort(int A[],int low,int  high); //快速排序int main(){int a[10]={12,43,2,3,56,76,2,23,9,31};//BubbleSort(a, 10);//SelectSort(a, 10);//InsertSort(a, 10);QuickSort(a,0,9 );for (int i=0;i<10;i++){cout<<a[i]<<" ";}system("pause");return 0;}void BubbleSort(int A[], int n) //冒泡排序{int flag=1;  //标志位,如果数组已经为有序,则提前停止循环for (int i=0;i<n-1&&flag;i++){flag=0;for (int j=0;j<n-1-i;j++){if(A[j]>A[j+1]){swap(A[j],A[j+1]);flag=1;}}}}void SelectSort(int A[], int n)  //选择排序{for (int i=0;i<n-1;i++){int k=i;  //用来记录当前最小值的下标for (int j=i+1;j<n;j++)if(A[j]<A[k])k=j;swap(A[k],A[i]);}}void InsertSort(int A[], int n)  //插入排序{int i,j;for (i=1;i<n;i++) //假设第一个是已经排好的{int x=A[i];for (j=i-1;(j>=0)&&(A[j]>x);)//j从排好序列的最后一个开始{A[j+1]=A[j];  //找到插入的位置j;j--;  //放在这里便于理解}A[j+1]=x; }}void QuickSort(int A[],int low,int  high) //快速排序{if (low>=high) return;  //递归调用的结束条件int i=low; int j=high; int x=A[low];  //将low位置的值作为标准,并且腾空while (i<j)   //注意比较的次序,从high端开始。{while(A[j]>x && j>i) j--; if (i<j) {A[i] = A[j]; i++; }  //把大的放在一端,小的放在一端while(A[i]<x && i<j) i++; if (i<j) {A[j] = A[i]; j--; }}A[i] = x;QuickSort(A,low,i-1); //递归调用QuickSort(A,i+1,high);}


1 0
原创粉丝点击