#include <iostream>
using namespace std;
void print_arr(int arr[],int size)
{
for (int i = 0; i < size; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
// 冒泡排序
void bubble_sort(int *arr, int size)
{
int x = 0;
for (int m=0; m<size-1; m++)
{
for (int i=0; i<size-m-1; i++)
{
if (arr[i] > arr[i + 1])
{
x = arr[i];
arr[i] = arr[i + 1];
arr[i+1] = x;
}
}
}
}
//快速排序
// 快排的分割函数
int partation(int arr[], int l, int r)
{
int val = arr[l];
while (l < r)
{
while (arr[r] > val && l < r)
{
r--;
}
if (l < r)
{
arr[l] = arr[r];
l = l + 1;
}
while (arr[l] < val && l < r)
{
l++;
}
if (l<r)
{
arr[r] = arr[l];
r = r - 1;
}
}
arr[l] = val;
return l;
}
//快速排序的递归接口
void quick_sort(int arr[], int begin, int end)
{
if (begin >= end)
{
return;
}
int pos = partation(arr, begin, end);
quick_sort(arr, begin, pos-1);
quick_sort(arr, pos + 1, end);
}
//直接插入排序
void inster_sort(int arr[], int size)
{
for (int i=0; i<size-1; i++)
{
int end = i;
int tem = arr[end + 1];
while (end >= 0)
{
if (tem < arr[end])
{
arr[end+1] = arr[end];
end--;
}
else
{
break;
}
}
arr[end + 1] = tem;
}
}
//希尔排序
void shell_sort(int arr[], int size)
{
int gap = size;
while (gap>1)
{
gap = gap / 2;
for (int i=0; i<size-gap; ++i)
{
int end = i;
int tem = arr[end+gap];
while (end >= 0)
{
if (tem < arr[end])
{
arr[end + gap] = arr[end];
end = end - gap;
}
else
{
break;
}
}
arr[end + gap] = tem;
}
}
}
//选择排序
void select_sort(int arr[], int size)
{
for (int i=0; i<size; i++)
{
int k = i;
int tem = arr[i];
for (int j=i+1; j<size; j++)
{
if (arr[j]<arr[k])
{
k = j;
}
}
if (k != i)
{
arr[i] = arr[k];
arr[k] = tem;
}
}
}
int main()
{
int arr[] = { 78,8,89,56,1,21,4,3,10,25,48};
int size = sizeof(arr)/sizeof(int);
cout << size << endl;
cout << "排序前数组:" << endl;
print_arr(arr,size);
//bubble_sort(arr,size); //冒泡排序
//quick_sort(arr, 0, size-1); //快速排序
//inster_sort(arr, size); //直接插入排序
//shell_sort(arr, size); //希尔排序
select_sort(arr, size); // 选择排序
cout << "排序后数组:" << endl;;
print_arr(arr,size);
return 0;
}