插入排序:直接插入,希尔排序

选择排序:选择排序,堆排序

交换排序:冒泡排序,快速排序

归并排序:归并排序

#include<iostream>
#include<assert.h>
using namespace std;
void InsertSort(int *arr, size_t size)
{
	assert(arr);
	for (int i = 0; i < size - 1; ++i)
	{
		int tmp = arr[i+1];
		int end = i;
		while (end >= 0&&arr[end]>tmp)
		{
			arr[end + 1] = arr[end];
			--end;
		}
		arr[end + 1] = tmp;//即使都大于tmp,将tmp放置arr[0]处
	}
}
void  ShellSort(int *arr, size_t size)
{
	assert(arr);
	int gap = size;
	while (gap>1)//注意跳出条件
	{
		gap = gap / 3 + 1;
		for (int i = 0; i < size - gap; ++i)//i可取到size-1-gap
		{
			int tmp = arr[i + gap];
			int end = i;
			while (end >= 0 && arr[end]>tmp)
			{
				arr[end + gap] = arr[end];
			    end-=gap;
			}
			arr[end + gap] = tmp;//即使都大于tmp,将tmp放置arr[0]处
		}
	}
}
void  SearchSort(int *arr, size_t size)
{
	assert(arr);
	for (int i = 0,j=size-1; i < j; ++i,-j)
	{
		int min = i;
		int max = j;
		for (int k = i; k<=j;++k)
		{
			if (arr[min]>arr[k])
				min = k;
			if (arr[max] < arr[k])
				max = k;
		}
		if (min != i)
		{
			int temp = arr[i];
			arr[i] = arr[min];
			arr[min] = temp;

			if (max == i) //如果最大值在最左边,肯定要被移走,此时要转移到相应的新位置 
			{
				max = min;
			}
		}

		if (max != j)
		{
			int tmp = arr[j];
			arr[j] = arr[max];
			arr[max] = tmp;
		}
	}
}
int Quick_Sort(int *arr, int left, int right)
{
	assert(arr);
	if (left >= right)
		return right;
	int tmp = arr[right];
	int index = right;
	--right;
	while (left < right)
	{
		while (left < right&&arr[left] <= tmp)
			left++;
		while (left < right&&arr[right] >=tmp)
			right--;
		if (left < right)
			swap(arr[left], arr[right]);
	}
	if (arr[right] >= tmp)
		swap(arr[right], arr[index]);//重点
	return right;
}
void QuickSort(int* arr,int left,int right)
{
	assert(arr);
	if (left < right)
	{
		int mid = Quick_Sort(arr, left, right);
	    QuickSort(arr, left, mid-1);
		QuickSort(arr, mid+1, right);
	}
	
}
void BubbleSort(int* arr, size_t size)
{
	assert(arr);
	int flag = 0;
	for (int i = 0; i < size - 1; ++i)
	{
		flag = 0;
		for (int j = 0; j < size - i - 1;++j)
		{
			if (arr[j]>arr[j + 1])
			{
				swap(arr[j], arr[j + 1]);
			}
			flag = 1;
		}
		if (flag == 0)
			break;
	}
}
void  Print(int *arr, size_t size)
{
	for (int i = 0; i < size; ++i)
	{
		cout << arr[i] << " ";
	}
	cout << endl;
}

#include"Sort.h"
void Test1()
{
	int arr[] = { 2, 0, 4, 9, 3, 6, 8, 7, 1, 5 };
	Print(arr, 10);
	//InsertSort(arr, 10);
	//ShellSort(arr, 10);
	//SearchSort(arr, 10);
	//BubbleSort(arr, 10);
	QuickSort(arr,0,9);
	Print(arr, 10);

}