交换排序

  • 快速排序
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);
}
}
  • 冒泡排序
#include<iostream>
#include<algorithm>
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; //将元素插入到指定位置
}
}

二路归并排序

基数排序