1.插入排序
2. shell排序
3. 简单选择排序
4. 堆排序
5. 冒泡排序
6. 快速排序
#include <iostream>
#include <algorithm>
using namespace std;
void print_a(int a[], int N)
{
for (int i = 0; i < N; i++)
cout << a[i] << " ";
cout << endl;
}
void insert_sort(int a[], int N)
{
int j=0;
for (int i = 1; i < N; i++)
{
int temp = a[i];
for (j = i-1; j>=0 && temp < a[j]; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = temp;
}
}
void shell_sort(int a[], int N)
{
int j = 0;
for (int P = N / 2; P > 0; P /= 2)//定义增量序列
{
for (int i = P; i < N; i++)//插入排序 把 1 全部换成 P
{
int temp = a[i];
for (j = i - P; j >= 0 && temp < a[j]; j-=P)
{
a[j + P] = a[j];
}
a[j + P] = temp;
}
}
}
int ScanForMin(int a[], int first, int end)
{
int min = first;
for (int i = first + 1; i <= end; i++)
{
if (a[i] < a[min])
min = i;
}
return min;
}
void simpleSelect_sort(int a[], int N)
{
for (int i = 0; i < N; i++)
{
int min = ScanForMin(a, i, N - 1);//找到i到N-1最小值的下标
swap(a[i], a[min]);//序列首元素和最小值进行交换
}
}
struct HNode{
int *data;
int size;
int capacity;
};
HNode* createHeap(int MaxSize)
{
HNode *H = new HNode;
H->data = new int[MaxSize + 1];
H->size = 0;
H->capacity = MaxSize;
H->data[0] = 1000;
return H;
}
bool insertHeap(HNode *H, int data)
{
if (H->size == H->capacity)
{
cout << "Heap is Full!" << endl;
return false;
}
int i = ++H->size;
for (; H->data[i/2] < data; i /= 2)
{
H->data[i] = H->data[i / 2];
}
H->data[i] = data;
return true;
}
int deleteMax(HNode *H)
{
int Maxdata = H->data[1];
int temp = H->data[H->size--];
int parent = 1;
int child;
for (; parent * 2 <= H->size; parent = child)
{
child = parent * 2;
if (child != H->size && (H->data[child] < H->data[child + 1]))
child++;
if (temp >= H->data[child])
break;
else
H->data[parent] = H->data[child];
}
H->data[parent] = temp;
return Maxdata;
}
void Heap_sort(int a[],int N)
{
HNode *H = createHeap(N);
for (int i = 0; i < N; i++)
insertHeap(H, a[i]);
for (int i = 0; i < N; i++)
cout << H->data[i] << endl;
for (int i = 0; i < N; i++)
{
a[i] = deleteMax(H);
}
}
void bubble_sort(int a[], int N)
{
int i = N - 1;
while (i > 0)
{
int lastex = 0;
for (int j = 0; j < i; j++)
{
if (a[j] < a[j + 1])
{
swap(a[j], a[j + 1]);
lastex = j;
}
}
i = lastex;
}
}
int Median3(int a[], int left, int right)
{
int center = (left + right) / 2;
if (a[left] > a[center])
swap(a[left], a[center]);
if (a[left] > a[right])
swap(a[left], a[right]);
if (a[center] > a[right])
swap(a[center], a[right]);
/*排序结束后a[left]-a[center]-a[right]从小到大排序*/
swap(a[center], a[right - 1]);/*将基准放到右边*/
/*只需考虑left+1到right-2排序*/
return a[right - 1];
}
void Quick_sort(int a[], int left, int right)
{
if (left < right)
{
int pivot = Median3(a, left, right);/*得到基准*/
int i = left;
int j = right - 1;
while (1)
{
while (a[++i] < pivot);
while (a[--j]>pivot);
if (i < j)
swap(a[i], a[j]);
else
break;
}
swap(a[i], a[right - 1]);/*i是基准的正确位置,将基准放入*/
/*对左右子集进行递归排序*/
Quick_sort(a, left, i - 1);
Quick_sort(a, i + 1, right);
}
}
void main()
{
int a[] = { 44,12,59,36,62 };
Quick_sort(a, 0, 4);
print_a(a, 5);
}