数据结构:排序算法复习 日常打卡

数据结构:排序算法复习 日常打卡

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstdio>
#include<string>
#include<vector>
#include<cstring>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<set>

using namespace std;

const int N=1000000+10;
const int Len=5;
int arr[6]={
    
    0,5,2,8,1,6};

void p(){
    
    
    for(int i=1;i<=Len;i++){
    
    
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}

//选择排序

//①冒泡排序
void my_buble_sort(){
    
    
    int flag;
    for(int i=1;i<Len;i++){
    
    
        flag=1;
        for(int j=1;j<=Len-i;j++){
    
    
            if(arr[j]>arr[j+1]){
    
    
                flag=0;
                swap(arr[j],arr[j+1]);
            }    
        }
        if(flag) break;
    }
    p();
}

//②快速排序
int pvt(int l, int r){
    
    
    arr[0]=arr[l];
    while(l<r){
    
    
        while(l<r && arr[r]>=arr[0]) r-- ;
        arr[l]=arr[r];
        while(l<r && arr[l]<=arr[0]) l++ ;
        arr[r]=arr[l];
    }
    arr[r]=arr[0];
    return r;
}

void my_fast_sort(int l, int r){
    
    
    if(l<r){
    
    
        int pivot=pvt(l,r);
        my_fast_sort(l,pivot-1);
        my_fast_sort(pivot+1,r);
    }
}


//选择排序

//①简单选择排序
void select_sort(){
    
    
    for(int i=1;i<Len;i++){
    
    
        int index=i;
        arr[0]=arr[i];
        for(int j=i+1;j<=Len;j++){
    
    
            if(arr[j]<arr[0]){
    
    
                index=j;
                arr[0]=arr[j];
            }
        }
        swap(arr[index],arr[i]);
    }
    p();
}

//②堆排序
void adjust_heap(int index, int Len){
    
    
    arr[0]=arr[index];
    int i;
    for(i=index*2;i<=Len;i*=2){
    
    
        if(i<Len && arr[i+1]>arr[i]){
    
    
            i++;
        }
        
        if(arr[0]>=arr[i]){
    
    
            break;
        }else{
    
    
            arr[index]=arr[i];
            index=i;
        }
    }
    
    arr[index]=arr[0];
}

void my_build_heap(){
    
    
    for(int i=Len/2;i;i--){
    
    
        adjust_heap(i,Len);
    }
}

void my_heap_sort(){
    
    
    my_build_heap();
    for(int i=Len;i;i--){
    
    
        swap(arr[1],arr[i]);
        adjust_heap(1,i-1);
    }
    p();
}

//插入排序

//①直接插入排序
void insert_sort(){
    
    
    for(int i=2;i<=Len;i++){
    
    
        arr[0]=arr[i];
        if(arr[0]<arr[i-1]){
    
    
            int j;
            for(j=i-1;j;j--){
    
    
                if(arr[0]<arr[j]){
    
    
                    arr[j+1]=arr[j];
                }else{
    
    
                    break;
                }
            }
            arr[j+1]=arr[0];
        }
    }
    p();
}

//②希尔排序
void shell_sort(){
    
    
    for(int dk=Len/2;dk;dk/=2){
    
    
        for(int i=dk+1;i<=Len;i++){
    
    
            arr[0]=arr[i];
            if(arr[0]<arr[i-dk]){
    
    
                int j;
                for( j=i-dk;j;j-=dk){
    
    
                    if(arr[0]<arr[j]){
    
    
                        arr[j+dk]=arr[j];
                    }else{
    
    
                        break;
                    }
                }
                arr[j+dk]=arr[0];
            }
            
        }
    }
    p();
}

int main(){
    
    

    return 0;
}

猜你喜欢

转载自blog.csdn.net/BOWWOB/article/details/110872795