zoukankan      html  css  js  c++  java
  • 交换排序(快速排序重点)

    1.冒泡排序

    从后往前,比较两个数的大小,交换位置

    //冒泡排序
    #include<iostream>
    using namespace std;
    void bubble_sort(int a[],int start,int end){
        int i,j,tmp;
        for(i=start;i<=end-2;i++){
            for(j=end-1;j>=i+1;j--)
            if(a[j]<a[j-1]) {
                tmp=a[j];
                a[j]=a[j-1];
                a[j-1]=tmp;
            } 
        }
    }
    int main()
    {
        int n;
        cin>>n;
        int a[n];
        for(int i=0;i<n;i++)  cin>>a[i];
        bubble_sort(a,0,n);
        for(int i=0;i<n;i++) cout<<a[i]<<" ";
    } 
    View Code

    2.快速排序

    快速排序主要是应用了分治策略

    a.遍历整个数组,将数组分为两个部分 paritition(int arr[],int start,int end) 

    b.对分好的部分进行再分

    //快排
    #include<iostream>
    using namespace std;
    //遍历整个数组,二分元素 
    int partition(int a[],int start,int end){//基准新位置 
        int i=start;
        int j=end-1;
        int tmp=a[i];
        while(i<j){//i=j时候退出 
            while(i<j&&a[j]>=tmp) j--; //找到小于基准的位置 
            a[i]=a[j];//将j元素放到基准的位置 
            while(i<j&&a[i]<=tmp) i++;//找到大于基准的位置 
            a[j]=a[i];//将位置放到小于基准的位置处 
        } 
        a[j]=tmp;//i j想等的位置放基准 
        return i;
    }
    
    void qsort(int a[],int start,int end){//对二分的部分继续二分 
        if(start<end-1){
            int tmp=partition(a,start,end);
            qsort(a,start,tmp);
            qsort(a,tmp+1,end);
        }
    } 
    int main()
    {
        int n;
        cin>>n;
        int a[n];
        for(int i=0;i<n;i++)  cin>>a[i];
        qsort(a,0,n);
        for(int i=0;i<n;i++) cout<<a[i]<<" ";
    }
    View Code

     练习了一下

    #include<iostream>
    using namespace std;
    int arr[10010];
    int partition(int start,int end){
        int tmp=arr[start];
        int i=start;
        int j=end;
        while(i<j){
            while(i<j&&arr[j]>=tmp) j--;
            arr[i]=arr[j];
            while(i<j&&arr[i]<=tmp) i++;
            arr[j]=arr[i];
        }
        arr[i]=tmp;
        return i;
    }
    void qsort(int start,int end){
        if(start<end){
            int t=partition(start,end);
    //        partition(start,t);
    //        partition(t+1,end);
    qsort(start,t);
    qsort(t+1,end);
        }
    }
    int main()
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++)
        cin>>arr[i];
        qsort(0,n-1);
        for(int i=0;i<n;i++)
        cout<<arr[i]<<" ";
    } 
    View Code
  • 相关阅读:
    0505.Net基础班第十四天(winform基础)
    0505.Net基础班第十三天(面向对象多态)
    Z-index
    div的padding和margin
    隐藏div,文本框角圆滑,消除外边框
    页面加载完成之后运行方法里的内容,隐藏标签,判断字符串里面是否包含某个字符
    CSS命令
    漂浮
    电子时钟
    用二维数组存数据(学科成绩、总分以及平均值)
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/10462971.html
Copyright © 2011-2022 走看看