首页 > 代码库 > [排序] 快排 && 冒泡(自己写)

[排序] 快排 && 冒泡(自己写)

#include <iostream>using namespace std;/*快速排序通过一趟排序,以轴点为界 分割为两部分:左部分 <= 轴点 <= 右部分再分别对左右两部分继续递归排序最终整个序列有序*/void quickSort(int arr[], int low,int high){        //if (arr==NULL||length<=0||start<=0||end>=length)        //break;    int i,key,j;    if (low<high){                              key=arr[low];        i=low;        j=high;        while(i<j){                         //结束条件是i==j            while(i<j && arr[j]>=key)    //从高到低,直到找到第一个<key的元素a[j]                j--;            if(i<j)                         //这里为什么要再判断一下呢??                arr[i++]=arr[j];         //继续上边,将arr[j]移到a[i]上            while(i<j && arr[i]<=key)                i++;            if(i<j)                arr[j--]=arr[i];        }        arr[i]=key;        quickSort(arr,low,i-1);        quickSort(arr,i+1,high);    }}void quickSort(int arr[], int low,int high){    //出错预防    //if (arr==NULL||length<=0||start<=0||end>=length)    //break;    int pivot=partition(arr,low,high); //寻找枢轴    quickSort(arr,low,pivot-1);    quickSort(arr,pivot+1,high);}*/void main(){    int a[]={1,3,2,5,7,4};    quickSort(a,0,5);    for(int i=0;i<6;i++)    cout <<a[i];}

 

#include <iostream>using namespace std;/*冒泡排序*******************************************一次起泡,最大值通过交换达到最右边二次起泡,第二大的值达到倒数第二位……len-1次起泡   ,基于面试宝典P216 *///改进版,若在某次起泡过程中没有交换,则说明已经全部有序了,因此这趟排序后就可以终止了void bubble(int *a, int len){    //对数组传引用,这里形参怎么写更好??                                //答:*a 和 a[]都可以    int i,j,tmp,k;    bool tag;    for(k=1;k<len;k++){           tag=false;            //只执行这个,表示此趟排序没有交换        for (i=0;i<len-k;i++){            j=i+1;            if (a[i]>a[j]){                tmp=a[i];                a[i]=a[j];                a[j]=tmp;                tag=true;    //表示此趟排序有交换            }        }        if (tag==false)            return;    }}/*//基本版void bubble(int *a, int len){//对数组传引用,这里形参怎么写更好??                            //答:*a 和 a[]都可以    int i,j,tmp,k;    for(k=1;k<len;k++){                 for (i=0;i<len-k;i++){            j=i+1;            if (a[i]>a[j]){                tmp=a[i];                a[i]=a[j];                a[j]=tmp;            }        }    }}*/void main(){    int a[8]={49,38,65,97,76,13,27,49};    /*        int a[10];            cout<<"请输入10个整数:"<<endl;            for(int i=0;i<10;i++)                cin>>a[i];        bubble(a,10);    */        bubble(a,8);    for(int i=0;i<8;i++)        cout<<a[i]<<\t;    cout<<endl;}

 

[排序] 快排 && 冒泡(自己写)