目录
一、插入排序
1)算法思想
插入排序即将一个无序的元素集合中的元素一个个插入到子集合中合适的位置,直到原集合中的元素全部加入到子集合中。
2)代码
//插入排序
void Insert_Sort(DataType a[], int n)
{
DataType temp;
for (int i = 0; i < n - 1; i++) //0 到 i 的数据已排序好
{
temp = a[i + 1];
int j = i;
while (j >= 0 && a[j] > temp) //如果是小于号则递减排序,如果是大于号则递增排序
{
a[j + 1] = a[j];
j--;
}
a[j+1] = temp;
}
}
二、希尔排序
1)算法思想
希尔排序算是插入排序的进阶版本,先把待排序的元素分为若干个小组,然后对每个小组进行插入排序。
这里的“增量(span)”代表将相邻span的元素分为一组,span的取值一般取n/2。
2)代码
//希尔排序
void Shell_Sort(DataType a[], int n)
{
int span = n / 2;
DataType temp;
while (span > 0)
{
for (int i = 0; i < span; i ++) //将数组分为span个小组
{
//对各组进行插入排序
for (int k = i; k < n - span; k += span)
{
temp = a[k + span];
int j = k;
while (j >= 0 && a[j] > temp)
{
a[j + span] = a[j];
j -= span;
}
a[j + span] = temp;
}
}
span /= 2;
}
}
三、选择排序
1)算法思想
每次从待排序的集合中选择最小(或最大)的元素放到集合的最前面,元素集合不断缩小,当待排序集合为空时代表排序结束。
2)代码
//选择排序
void Select_Sort(DataType a[], int n)
{
DataType temp;
for (int i = 0; i < n; i++)
{
DataType min = a[i];
int k = i;
for (int j = i; j < n; j++)
{
if (a[j] < min)
{
min = a[j];