#include<iostream>
using namespace std;
/*直接插入排序*/
void DirectInsert(int r[],int n)
{
for (int i = 2; i <= n; i++)
{
r[0] = r[i];
int j = i - 1;
while (r[0] < r[j])
{
r[j + 1] = r[j];
j--;
}
r[j+1] = r[0];
}
}
/*希尔排序*/
void ShellSort(int r[], int n)
{
for(int d = n / 2; d>=1;d=d/2)
for (int i = 1+d; i <= n; i++)
{
r[0] = r[i];
int j = i - d;
while (j>0&&r[0] < r[j])
{
r[j + d] = r[j];
j=j-d;
}
r[j + d] = r[0];
}
}
/*冒泡排序*/
void BubbleSort(int r[],int n)
{
int exchange = n - 1;
while (exchange)
{
int bound = exchange;
exchange = 0;
for(int j=0;j<bound;j++)
if (r[j] > r[j + 1])
{
int temp;
temp = r[j];
r[j] = r[j + 1];
r[j + 1] = temp;
exchange = j;
}
}
}
/*快速排序*/
int Partition(int r[], int start,int end )
{
int i = start;
int j = end;
while (i < j)
{
while (i < j && r[i] < r[j])
j--;
if (i < j)
{
int temp1;
temp1 = r[i];
r[i] = r[j];
r[j] = temp1;
i++;
}
while (i < j && r[i] < r[j])
i++;
if (i < j)
{
int temp2;
temp2 = r[i];
r[i] = r[j];
r[j] = temp2;
j--;
}
}
return i;
}
void QuickSort(int r[], int start, int end)
{
if (start < end)
{
int pos = Partition(r, start, end);
QuickSort(r, start, pos - 1);
QuickSort(r, pos + 1, end);
}
}
/*堆排序*/
void Shift(int r[], int k, int end)
{
int i = k; int j = 2 * i;
while (j <=end)
{
if (j < end && r[j] < r[j + 1])
j++;
if (r[i] < r[j])
{
int temp;
temp = r[i];
r[i] = r[j];
r[j] = temp;
}
i = j;
j = 2 * i;
}
}
void HeapSort(int r[], int n)
{
for (int k = n / 2; k >= 1; k--)
Shift(r, k, n);
for (int k = 1; k < n; k++)
{
int temp;
temp = r[1];
r[1] = r[n - k + 1];
r[n - k + 1] = temp;
Shift(r, 1, n - k);
}
}
/*归并排序*/
void Merge(int r[], int t[], int start, int mid, int end)
{
int i = start; int j = mid + 1; int k = start;
while (i <= mid&& j <= end)
{
if (r[i] <= r[j])
t[k++] = r[i++];
else
t[k++] = r[j++];
}
while (i <= mid)
t[k++] = r[i++];
while (j <= end)
t[k++] = r[j++];
}
void MergePass(int r[], int t[], int n, int h)
{
int i = 1;
while (i <= n - 2 * h+1)
{
Merge(r, t, i, i + h - 1, i + 2 * h - 1);
i = i + 2 * h;
}
if (i < n - h+1)
Merge(r, t, i, i + h - 1, n);
else
{
for (int k = i; k <= n; k++)
t[k] = r[k];
}
}
void MergeSort(int r[], int t[], int n)
{
int h = 1;
while (h < n)
{
MergePass(r, t, n, h);
h = 2 * h;
MergePass(t, r, n, h);
h = 2 * h;
}
}
/*void MergeSort2(int r[], int t[], int start, int end)
{
int mid;
if (start == end)
t[start]=r[start];
else
{
mid=(start + end) / 2;
MergeSort2(r, t, start, mid);
MergeSort2(r, t, mid + 1, end);
Merge(t, r, start, mid, end);
}
}*///这里的递归算法有点问题
int main()
{
int r[] = {-1,1,6,5,4,2,7,8,3};
int t[9] = {0};
MergeSort(r, t,8);
for (int i = 1; i < 9; i++)
cout << r[i];
}
排序:基本排序算法合集
最新推荐文章于 2024-07-18 11:54:47 发布