排序算法
直接插入算法
void StraightInsertSort(int arr[], int n)
{
int i, j;
int temp;//监视哨,暂存arr[i]
for (i = 1; i < n; i++) {
//arr[0]有序,从a[1]开始
temp = arr[i];
for (j = i; j > 0 && arr[j - 1] > temp; j--)
arr[j] = arr[j - 1];//大于temp的后移
arr[j] = temp;
}
}
希尔排序
void ShellSort(int arr[], int n)
{
//增量gap,并逐步缩小增量
for (int gap = n / 2; gap > 0; gap /= 2) {
//从第gap个元素开始,逐个对所在组进行直接插入排序
for (int i = gap; i < n; i++) {
int j = i;
int temp = arr[j];
if (arr[j] < arr[j - gap]) {
while (j - gap >= 0 && temp < arr[j - gap]) {
arr[j] = arr[j - gap];
j -= gap;
}
arr[j] = temp;
}
}
}
}
快速排序
算法思想
- 分解:先从数列中取出一个元素作为基准元素。以基准元素为标准,将序列分解为两个子序列,使小于或等于基准元素的子序列在左侧,使大于基准元素在子序列在右侧。<