#include<iostream>
using namespace std;
int main()
{
return 0;
}
//直接插入排序
void insertSort(int arr[], int n)
{
int temp, i, j;
for (i = 0; i < n; i++)
{
temp = arr[i];
j = i - 1;
while (j>=0&&temp<arr[j])
{
arr[j + 1] = arr[j];
--j;
}
arr[j + 1] = temp;
}
}
//简单选择排序
void selectSort(int arr[], int n)
{
int i, j, k;
int temp;
for ( i = 0; i < n; i++)
{
k = i;
for (j = i + 1; j < n;++j)
if (arr[k]>arr[j])
k = j;
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}
//冒泡排序
void bubleSort(int arr[], int n)
{
int i, j, flag;
int temp;
for ( i = n-1; i >=1; --i)
{
flag = 0;
for ( j = 1; j <= i; j++)
{
if (arr[j-1]>arr[j])
{
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
flag = 1;
}
}
if (flag = 0)
return;
}
}
//希尔排序
void shellSort(int arr[], int n)
{
int temp;
//设置不断减半的增量
for (int gap = n/2; gap >0; gap/=2)
{
//i的作用是选出无序序列的一个关键字并将其插入到有序序列中
for (int i = gap; i < n; ++i)
{
temp = arr[i];
int j;
for (j = i; j >= gap && arr[j - gap]>temp; j -= gap)
arr[j] = arr[j - gap];
arr[j] = temp;
}
}
//最后gap = 1时,就成为了直接插入排序
}
//快速排序
void quicksort(int arr[], int low, int high)
{
int temp;
int i = low, j = high;
if (low<high)
{
temp = arr[low];
while (i<j)
{
while (j>i&&arr[j] >= temp) --j;
if (i < j)
{
arr[i] = arr[j];
++i;
}
while (i < j&&arr[i] < temp) ++i;
if (i<j)
{
arr[j] = arr[i];
--j;
}
}
arr[i] = temp;
quicksort(arr, low, i - 1);
quicksort(arr, i + 1, high);
}
}
//堆排序实现代码
//调整顺序函数
void sift(int arr[], int low, int high)
{
int i = low, j = 2 * i + 1;
int temp = arr[i];
while (j <= high)
{
if (j < high && arr[j] < arr[j + 1])
++j;
if (temp < arr[j])
{
arr[i] = arr[j];
i = j;
j = 2 * i + 1;
}
else
break;
}
arr[i] = temp;
}
//建堆函数
void heapSort(int arr[], int n)
{
int i;
int temp;
for (i = n / 2 - 1; i >= 0; --i)
sift(arr, i, n - 1);
for (i = n - 1; i > 0; --i)
{
temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
sift(arr, 0, i - 1);
}
}
//归并排序
//主函数
void mergeSort(int arr[], int low, int high)
{
if (low < high)
{
int mid = (low + high) / 2;
mergeSort(arr, low, mid);
mergeSort(arr, mid + 1, high);
merge(arr, low, mid, high);
}
}
//排序函数
void merge(int arr[], int low, int mid, int high)
{
int i, j, k;
int n1 = mid - low + i;
int n2 = high - mid;
//VS编译器要求表达式必须具有常量值,先用数字代替
//int L[n1], R[n2];
int L[50], R[50];
for (i = 0; i < n1; i++)
L[i] = arr[low + i];
for (j = 0; j < n2; j++)
R[j] = arr[mid + 1 + j];
i = 0;
j = 0;
k = low;
while (i<n1 && j<n2)
{
if (L[i] <= R[j])
arr[k] = L[i++];
else
arr[k] = R[j++];
k++;
}
while (i < n1)
arr[k++] = L[i++];
while (j < n2)
arr[k++] = R[j++];
}
考研数据结构——排序,算法代码部分
猜你喜欢
转载自blog.csdn.net/gangangan0001/article/details/83956323
今日推荐
周排行