十大排序(知识篇)--纯手工代码

简介: 十大排序(知识篇)--纯手工代码
//
//冒泡排序
//
#include <bits/stdc++.h>
using namespace  std;
void bubbleSort(int arr[],int len){
   bool flag = false;
   for(int i=0;i<len-1;i++){
       flag = false;
       for(int j=0;j<len-i-1;j++){
           if(arr[j] > arr[j+1]){
               swap(arr[j],arr[j+1]);
               flag = true;
           }
       }
       if(!flag){
           break;
       }
   }
}
//
// 计数排序
//
#include <bits/stdc++.h>
using namespace std;
void countingSort(int arr[],int len){
    int maxn = 0;
    for(int i=0;i<len;i++){maxn = max(maxn,arr[i]);}
    int t = maxn;
    int *cen = new int[maxn+10];
    for(int i=0;i<=maxn;i++){cen[i] = 0;}
    for(int i=0;i<len;i++){cen[arr[i]]++;}
    for(int i=1;i<=maxn;i++){cen[i] += cen[i-1];}
    int *ans = new int[len];
    for(int i=0;i<len;i++){
        ans[cen[arr[i]]-1] = arr[i];
        cen[arr[i]]--;
    }
    for(int i=0;i<len;i++){
        arr[i] = ans[i];
    }
    delete []ans;
    delete []cen;
}
//堆排序
#include <bits/stdc++.h>
using namespace std;
int heapSize = 0;
int left(int x){
    if(2*x+1 >= heapSize) return -1;
    return 2*x+1;
}
int right(int x){
    if(2*x+2 >= heapSize) return -1;
    return 2*x+2;
}
void minHeapify(int arr[],int x){
    int L = left(x);
    int R = right(x);
    int mann = x;
    if(L != -1 && arr[L] > arr[mann]){mann = L;}
    if(R != -1 && arr[R] > arr[mann]){mann = R;}
    if(mann != x){
        swap(arr[x],arr[mann]);
        x = mann;
        minHeapify(arr,x);
    }
}
void Delete(int arr[]){
    swap(arr[heapSize-1],arr[0]);
    heapSize--;
    minHeapify(arr,0);
}
void heapSort(int arr[],int len){
    //建立大顶堆
    heapSize = len;
    for(int i=(len-1)/2;i>=0;i--){
        minHeapify(arr,i);
    }
    //从堆中取结点
    for(int i=0;i<len;i++){
        Delete(arr);
    }
}
//
// 直接插入排序
//
#include <bits/stdc++.h>
using namespace std;
void insertSort(int arr[],int len){
    for(int i=1;i<len-1;i++){
        int j   =  i-1;
        int key =  arr[i];
        while(j>=0 && arr[j] > key){
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = key;
    }
}
//
// 归并排序
//
#include <bits/stdc++.h>
using namespace std;
void merge(int arr[],int l,int r){
    int mid = (l+r)/2;
    int nL  =  mid-l+1;
    int nR  =  r-mid;
    //创建两个行的数组存放
    int *L = new int[nL];
    int *R = new int[nR];
    for(int i=0;i<nL;i++){L[i]=arr[l+i];}
    for(int i=0;i<nR;i++){R[i]=arr[i+mid+1];}
    int i=0,j=0;        //分别指向L和R
    for(int k=l;k<=r;k++){
        if(j>=nR || (i<nL && L[i]<=R[j])){
            arr[k] = L[i++];
        }else{
            arr[k] = R[j++];
        }
    }
}
void mergeSort(int arr[],int l,int r){
    if(l < r){
        int mid = (l+r)/2;
        mergeSort(arr,l,mid);
        mergeSort(arr,mid+1,r);
        merge(arr,l,r);
    }
}
//
// 鸽巢排序
//
#include <bits/stdc++.h>
using namespace std;
void pigeonSort(int arr[],int len){
    int k = 0;
    for(int i=0;i<len;i++){k = max(k,arr[i]);}
    int *cen = new int[k+10];
    for(int i=0;i<=k;i++){cen[i]=0;}
    for(int i=0;i<len;i++){cen[arr[i]]++;}
    int j=0;
    for(int i=0;i<=k;i++){
        while(cen[i]){
            arr[j++] = i;
            cen[i]--;
        }
    }
    delete []cen;
}
//
//两种随机快排
//
#include <bits/stdc++.h>
using namespace std;
int partition(int arr[],int l,int r){
    int rd = l+rand()%(r-l);
    swap(arr[l],arr[rd]);
    int key = arr[rd];
    int i=l;
    for(int j=l;j<r;j++){
        if(arr[j] < key){
            swap(arr[i],arr[j]);
            i++;
        }
    }
    swap(arr[i],arr[r]);
    return i;
}
int partition2(int arr[],int l, int r){
    int ld = l+rand()%(r-l);
    swap(arr[l],arr[ld]);
    int key = arr[l];
    while(l < r){
        while(l<r && arr[l] <= key){l++;}
        arr[r] = arr[l];
        while(l<r && arr[r] > key){r--;}
        arr[l] = arr[r];
    }
    arr[l] = key;
    return l;
}
void quicksort(int arr[],int l,int r){
    if(l < r){
        int mid = partition2(arr,l,r);
        quicksort(arr,l,mid-1);
        quicksort(arr,mid+1,r);
    }
}
//
// 基数排序
//
#include <bits/stdc++.h>
using namespace std;
void redixSort(int arr[],int len){
    int maxn = 0;
    for(int i=0;i<len;i++){maxn = max(arr[i],maxn);}
    int t = maxn;
    int d = 0;
    while(t){t/=10;d++;}
    int mod = 10;
    for(int k=0;k<d;k++){
        queue<int> Bucket[10];
        for(int i=0;i<len;i++){
            Bucket[(arr[i]%mod) / (mod/10)].push(arr[i]);
        }
        int j=0;
        for(int i=0;i<10;i++){
            while(!Bucket[i].empty()){
                arr[j++] = Bucket[i].front();
                Bucket[i].pop();
            }
        }
        mod *= 10;
    }
}
//
// 选择排序
//
#include <bits/stdc++.h>
using namespace  std;
void selectSort(int arr[],int len){
    for(int i=0;i<len-1;i++){
        int minx = i;
        for(int j=i+1;j<len;j++){
            if(arr[j] < arr[minx]){minx = j;}
        }
        swap(arr[i],arr[minx]);
    }
}
//
// 希尔排序
//
#include <bits/stdc++.h>
using namespace std;
void shellSort(int arr[],int len){
    int gap =  len/2;
    while(gap >= 1){
       //做一个直接插入
       for(int i=gap;i<len;i++){
            int j = i - gap;
            int key = arr[i];
            while(j>=0 && arr[j] > key){
                arr[j+gap] = arr[j];
                j=j-gap;
            }
            arr[j+gap] = key;
       }
       gap = gap/2;
    }
}

如果有看不懂的地方,欢迎私聊和留下评论。。。必定及时解释

相关文章
十大排序引出的问题()
十大排序引出的问题()
33 0
|
3月前
|
数据可视化 数据挖掘 Python
揭秘数据排序的神秘面纱:如何用DataFrame排序和排名洞悉数据背后的秘密?
【8月更文挑战第22天】DataFrame排序和排名是数据分析的关键步骤,尤其在使用Python的Pandas库处理表格数据时尤为重要。通过对DataFrame使用`sort_values()`方法可实现基于一列或多列的灵活排序,而`rank()`方法则能轻松完成数据排名。例如,对学生信息DataFrame按分数排序及排名,或先按年龄排序再按分数排名,均可快速洞察数据模式与异常值,适用于金融分析和教育研究等多个领域。掌握这些技术有助于提高数据分析效率并深入理解数据。
49 1
|
6月前
|
搜索推荐 Java Shell
8大Java排序方法(由简入繁),有代码详解和原理指导
8大Java排序方法(由简入繁),有代码详解和原理指导
58 0
|
存储
八大排序之图文详解(下)
八大排序之图文详解(下)
|
6月前
|
小程序 机器人 程序员
Scratch3.0——助力新进程序员理解程序(案例一十四、闯迷宫)
Scratch3.0——助力新进程序员理解程序(案例一十四、闯迷宫)
61 0
|
6月前
|
C语言
拒绝水文!八大排序(三)【适合初学者】快速排序
拒绝水文!八大排序(三)【适合初学者】快速排序
|
搜索推荐 Java
八大排序之图文详解(上)
八大排序之图文详解(上)
|
存储 编译器
IAT表入门简析【滴水逆向三期52笔记】
IAT表入门简析【滴水逆向三期52笔记】
|
存储 供应链 安全
Java开发的五条安全小贴士,助你的项目更安全
Java开发的五条安全小贴士,助你的项目更安全
算法竞赛之查找算法(持续补充...)
算法竞赛之查找算法(持续补充...)
下一篇
无影云桌面