交换排序(快速排序重点)

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
原文地址:https://www.cnblogs.com/helloworld2019/p/10462971.html