交换排序
- 快速排序
void quick_sort(int s[], int l, int r)
{
    if (l < r)
    {
        //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
        int i = l, j = r, x = s[l];
        while (i < j)
        {
            while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
                j--;  
            if(i < j) 
                s[i++] = s[j];
            while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
                i++;  
            if(i < j) 
                s[j--] = s[i];
        }
        s[i] = x;
        quick_sort(s, l, i - 1); // 递归调用 
        quick_sort(s, i + 1, r);
    }
}- 冒泡排序
using namespace std;
//数字数组
void BubbleSort(int a[],int n){
    //排序的次数
    for(int i = 1;i < n;i++)
    {
        for(int j = 0;j < n-i;j++){
            if(a[j] < a[j+1]){
                swap(a[j],a[j+1]);
            }
        }
    }
}
int main(){
    //一共九个数字
    int a[] = {5,8,9,7,6,3,2,1,4};
    BubbleSort(a,9);
    for(int i = 0;i < 9;i++){
        cout << a[i] << " ";
    }
}选择排序
- 简单选择排序
void SelectSort(int a[],int n){
    for(int i = 1;i < n;i++){
        int M = a[i-1];
        for(int j = i - 1;j < n;j++){
            if(a[j] > M)
                swap(a[j],M);
        }
        a[i-1] = M;
    }
}- 堆排序
插入排序
- 直接插入排序
void insertSort(int a[],int n){
    //从第一个数开始插入
    for(int i = 1;i < n;i++){
        //比它小就往前插入
        for(int j = i; j >= 1 && a[j-1] > a[j];j--){
            swap(a[j-1],a[j]);
        }
    }
}- 希尔排序
void ShellInsert(int a[],int n)
{
  int i , j , inc ,key;
  for(inc = n/2; inc > 0; inc /= 2 ){
      //里面开始插入排序 从第二个数开始
      for(i = inc;i < n;i++){
          //key 是
          key = a[i];
          for(j = i;j >= inc && key < a[j-inc];j -= inc)
              a[j] = a[j-inc];
          a[j] = key;  
      }
  }
} // ShellInsert- 折半排序
void BinaryInsertSort(int R[],int n)
{
    int i,j,low,mid,high,temp;
    for(i=1;i<n;i++)
    {
        low=0;
        high=i-1;
        temp=R[i];
        while(low<=high)    //找到合适的插入位置high+1,如果中间位置元素比要插入元素大,则查找区域向低半区移动,否则向高半区移动
        {
            mid=(low+high)/2;
            if(R[mid]>temp)
            {
                high=mid-1;
            }
            else
            {
                low=mid+1;
            }
        }
        for(j=i-1;j>=high+1;j--)    //high+1后的元素后移
        {
            R[j+1]=R[j];
        }
        R[j+1]=temp;    //将元素插入到指定位置
    }
}二路归并排序
基数排序
                
                









