1.【插入排序】
void InsertSort(int* p ,int size)
{
for(int i=1;i<size;i++)
{
int j = i;
int t = p[i];
for(; j > 0 && p[j-1] > t; j--)
p[j] = p[j-1];
p[j] = t;
}
}
2.【选择排序】
void SelectSort(int* arr,int size)
{
for(int i=0;i<size;i++)
{
int psn=i;
for(int j=i;j<size;j++)
{
if(arr[j]<arr[psn])
psn = j;
}
swap(arr[psn],arr[i]);
}
}
3.【冒泡排序】
void BubbleSort(int* arr,int size)
{
bool cg = true;
int n = 0;
do
{
cg = false;
for (int i=0;i<size-1-n;i++)
{
if (arr[i]>arr[i+1])
{
cg = true;
swap(arr[i],arr[i+1]);
}
}
n++;
} while (cg);
}
4.【快速排序】
void QuickSort(int* arr,int size)
{
int *L,*R;
if(size <= 1) return;
if(2 == size)
{
if(arr[0] > arr[1])
swap(arr[0],arr[1]);
return;
}
L = &arr[1];
R = &arr[size -1];
while(L < R)
{
while(L<R && *L < *arr) ++L;
while(R>arr && !(*R < *arr)) --R;
if(L<R) swap(*R,*L);
}
swap(*R,*arr);
QuickSort(arr, R-arr);
QuickSort(R+1,size -1 -(R-arr));
}
5.【堆排序】
void Shift(int* heap, int start, int end)
{
int tmp = heap[start];
int parent = start;
int child = parent * 2 + 1;
while(child <= end)
{
if(child < end &&
heap[child] < heap[child+1])
child++;
if(tmp < heap[child])
{
heap[parent] = heap[child];
parent = child;
child = 2 * parent +1;
} else break;
}
heap[parent] = tmp;
}
void BuildHeap(int* heap,int size)
{
for(int i=size/2-1; i >=0; i--)
Shift(heap,i,size-1);
}
void HeapSort(int* heap,int size)
{
BuildHeap(heap,size);
for(int i = size-1; i>0; i--)
{
swap(heap[0],heap[i]);
Shift(heap,0,i-1);
}
}
6.【归并排序】
void Merge(int* arr,int first,int mid,int last)
{
int