码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-09-11 01:04:21      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   for   art   div   

#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;
}

 

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

标签:style   blog   color   io   os   ar   for   art   div   

原文地址:http://www.cnblogs.com/zhangXH/p/3965501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!