簡單排序總結
阿新 • • 發佈:2020-12-09
#include <bits/stdc++.h>
using namespace std;
//直接插入排序
void insert_sort(int a[], int n)
{
for(int i = 2; i <= n; i++)
{
if(a[i] < a[i - 1])
{
a[0] = a[i];
int j;
for(j = i - 1; a[0] < a[j]; j--)
a[j + 1] = a[j];
a[ j + 1] = a[0];
}
}
}
//折半插入排序
void binary_insertsort(int a[], int n)
{
for(int i = 2; i <= n; i++)
{
int l = 1, r = i - 1, temp = a[i];
while(l <= r)
{
int mid = (l + r) / 2;
if(a[mid] > temp)
r = mid - 1;
else
l = mid + 1;
}
for(int j = i - 1; j >= r + 1; j--)
a[j + 1] = a[j];
a[r + 1] = temp;
}
}
//希爾排序
void shell_sort(int a[], int n)
{
for(int d = n / 2; d >= 1; d /= 2) //增量
{
for(int i = d + 1; i <= n; i++)
{
if (a[i] < a[i - d])
{
a[0] = a[i];
int j;
for(j = i - d; j >= 0 && a[0] < a[j]; j -= d)
a[j + d] = a[j];
a[j + d] = a[0];
}
}
}
}
//簡單選擇排序
void select_sort(int a[], int n)
{
for(int i = 1; i < n; i++)
{
int minn = a[i], k = i;
for(int j = i + 1; j <= n; j++)
if(a[j] < minn)
{
minn = a[j];
k = j;
}
if(k != i) swap(a[i], a[k]);
}
}
//氣泡排序
void bubble_sort(int a[], int n)
{
int flag = 1;
for(int i = 0; i < n - 1 && flag; i++)
{
flag = 0;
for(int j = 1; j <= n - 1 - i; j++)
if(a[j + 1] < a[j]) swap(a[j + 1], a[j]), flag = 1;
}
}
//快速排序
void quick_sort(int a[], int l, int r)
{
if(l >= r) return;
int i = l, j = r, temp = a[l];
while(i < j)
{
while(i < j && a[j] >= temp) j--;
while(i < j && a[i] <= temp) i++;
if(i < j) swap(a[i], a[j]);
}
a[l] = a[i];
a[i] = temp;
quick_sort(a, l, i - 1), quick_sort(a, i + 1, r);
}
int main()
{
int a[100], n;
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
//insert_sort(a, n);
//quick_sort(a, 1, n);
//shell_sort(a, n);
//bubble_sort(a, n);
//select_sort(a, n);
binary_insertsort(a, n);
for(int i = 1; i <= n; i++) cout << a[i] << ' ';
return 0;
}