1.冒泡排序
void popSort(int *array, int len)
{
for(int i = 0; i < len; i++)
{
for(int j = 0; j < len - i - 1; j++)
{
if(array[j] > array[j + 1])
{
array[j] ^= array[j + 1];
array[j + 1] ^= array[j];
array[j] ^= array[j + 1];
}
}
}
}
2.选择排序
void selectSort(int *array, int len)
{
for(int i = 0; i < len - 1; i++)
{
for(int j = i + 1; j < len; j++)
{
if(array[i] > array[j])
{
array[i] ^= array[j];
array[j] ^= array[i];
array[i] ^= array[j];
}
}
}
}
3.插入排序
void insertSort(int *array, int n)
{
int i, j, key;
for(i = 1; i < n; i++)
{
key = array[i];
for(j = i; j - 1 >= 0 && key < array[j - 1]; j--)
array[j] = array[j - 1];
array[j] = key;
}
}
4.希尔排序
void shellSort(int *array, int n)
{
int i, j, key;
int gap = n >> 1;
while(gap>=1)
{
for(i = gap; i < n; i++)
{
key = array[i];
for(j = i; j - gap >= 0 && key < array[j-gap]; j = j - gap)
array[j] = array[j-gap];
array[j] = key;
}
gap = gap >> 1;
}
}
5.快速排序
void quickSort(int *array, int left, int right)
{
if(left < right)
{
int pviot = array[left], low = left, high = right;
while(low < high)
{
while(low < high && array[high] >= pviot)
high--;
array[low] = array[high];
while(low < high && array[low] < pviot)
low++;
array[high] = array[low];
}
array[high] = pviot;
quickSort(array, left, low-1);
quickSort(array, low+1, right);
}
}
6.归并排序
void Merge(int a[], int left, int mid, int right, int* temp)
{
int len = right - left + 1; //数组的长度
int k = 0;
int i = left; // 前一数组的起始元素
int j = mid + 1; // 后一数组的起始元素
while (i <= mid && j <= right)
{
// 选择较小的存入临时数组
temp[k++] = a[i] <= a[j] ? a[i++] : a[j++];
}
while (i <= mid)
{
temp[k++] = a[i++];
}
while (j <= right)
{
temp[k++] = a[j++];
}
for (int k = 0; k < len; k++)
{
a[left++] = temp[k];
}
}
// 递归实现的归并排序
void MergeSort(int a[], int left, int right)
{
if (left == right)
return;
int mid = (left + right) / 2;
int* temp = new int[right - left + 1];
MergeSort(a, left, mid);
MergeSort(a, mid + 1, right);
Merge(a, left, mid, right, temp);
delete[]temp;
}