数据结构的基本排序算法主要有:直接插入排序、希尔排序、简单选择排序、堆排序、冒泡排序、快速排序、归并排序。
直接插入排序:
直接插入排序的思想比较简单,就是将排序数列分为两部分,前段数列是有序的,每次取后段数列中的第一个数,插到前段序列的合理位置,使得前段数列仍然保持有序。
void PrintArray(int* a, int n) //实现打印数组
{
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
}
void Swap(int* a, int* b){ //实现两数交换
int temp;
temp = *a;
*a = *b;
*b = temp;
}
//插入排序:
void InsertSort(int* a, int n)
{
assert(a);
for (int i = 0; i < n - 1; ++i)
{
int end = i;
int x = a[end + 1];
while (end >= 0)
{
if (a[end] > x)
{
a[end + 1] = a[end];
--end;
}
else
{
break;
}
}
a[end + 1] = x;
}
PrintArray(a, n);
}
希尔排序:
希尔排序是插入排序的一种,它的思想是将待排数列按照一定的增量划分成多个子序列,将子序列分别进行插入排序。
void ShellSort(int* a, int n)
{
int gap = n;
while (gap > 1)
{
gap /= 2;
for (int i = 0; i < n - gap; ++i)
{
int end = i;
int x = a[end + gap];
while (end >= 0)
{
if (a[end] > x)
{
a[end + gap] = a[end];
end -= gap;
}
else
{
break;
}
}
a[end + gap] = x;
}
}
PrintArray(a, n);
}
选择排序:
选择排序的思想更容易理解了,就是每一趟和所以未排序的元素比较遍,选择一个最大或者最小的元素放在最终位置。