#include<iostream>
using namespace std;
//插入排序
//简单的插入排序
void insert_sort(int a[], int size)
{
for(int i = 1; i< size; i++)
{
if(a[i] < a[i-1])
{
int j = i - 1;
int temp = a[i];
while(j >= 0 && a[j] > temp)
{
a[j+1] = a[j];
j--;
}
a[j+1] = temp;
}
}
}
//希尔排序
void shell_sort(int a[], int size)
{
for(int dk = size / 2; dk > 0; dk /= 2)
{
for(int i = dk; i < size; i += dk)
{
if(a[i] < a[i-dk])
{
int j = i - dk;
int temp = a[i];
while(j >= 0 && a[j] > temp)
{
a[j + dk] = a[j];
j -= dk;
}
a[j+dk] = temp;
}
}
}
}
//选择排序
//简单的选择排序
void select_sort(int a[], int size)
{
for(int i = 0; i < size; i++)
{
int index = i;
for(int j = i + 1; j < size; j++)
{
if(a[j] < a[index])
index = j;
}
if(index != i)
{
int temp = a[i];
a[i] = a[index];
a[index] = temp;
}
}
}
//堆排序
void heap_adjust(int a[], int i, int size)
{
int lchild = 2 * i + 1;
int rchild = 2 * i + 2;
int max = i;
if(lchild < size)
{
if(rchild < size && a[max] < a[rchild])
max = rchild;
if(a[max] < a[lchild])
max = lchild;
if(i != max)
{
int temp = a[i];
a[i] = a[max];
a[max] = temp;
heap_adjust(a, max, size);
}
} else {
return ;
}
}
void heap_build(int a[], int size)
{
for(int i = size / 2; i >= 0; i--)
heap_adjust(a, i, size);
}
void heap_sort(int a[], int size)
{
heap_build(a, size);
for(int i = size - 1; i >= 0; i--)
{
int temp = a[0];
a[0] = a[i];
a[i] = temp;
heap_adjust(a, 0, i);
}
}
//冒泡排序
void bubble_sort(int a[], int size)
{
for(int i = 0; i < size; i++)
{
for(int j = 0; j < size - i - 1; j++)
{
if(a[j] > a[j+1])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
//快速排序
void quik_sort(int a[], int left, int right)
{
int i = left;
int j = right;
int temp = a[i];
if(i >= j) return;
while(i < j)
{
while(i < j && a[j] >= temp) j--;
if(i < j)
a[i++] = a[j];
while(i < j && a[i] <= temp) i++;
if(i < j)
a[j--] = a[i];
}
a[i] = temp;
quik_sort(a, 0, i-1);
quik_sort(a, i+1, right);
}
int main()
{
int a[] = {4,5,2,8,9,1,8,3,0};
//shell_sort(a, 9);
//insert_sort(a, 9);
//select_sort(a, 9);
//heap_sort(a, 9);
//bubble_sort(a, 9);
quik_sort(a, 0, 8);
for(int i = 0; i < 9; i++)
cout << a[i] << "\t";
cout << endl;
return 0;
}
排序算法总结(C++)
最新推荐文章于 2024-10-19 00:20:56 发布