一. 插入排序
//插入排序
void InsertSort(int *a, int n)
{
int i = 0;
for(i = 0; i < n - 1; i++)
{
int end = i; //记录有序序列的最后一个元素
int tmp = a[end + 1]; //待插入的元素
while (end > -1)
{
if(tmp < a[end])
{
a[end + 1] = a[end];
end--;
}
else //找到插入位置
{
break;
}
}
a[end + 1] = tmp; //此时的end是小于0的,所以要加 1
}
}
二. 希尔排序
//希尔排序
void ShellSort(int *a, int n)
{
int gap = n; //n为数据个数
while(gap > 1)
{
gap = gap / 2; //gap折半
int i = 0;
//进行一趟排序
for(i = 0; i < n - gap; i++)
{
int end = i;
int tmp = a[end + gap];
while(end >= 0)
{
if(tmp < a[end])
{
a[end + gap] = a[end];
end -= gap; //到分好组内的下一个元素
} //参考插入排序
else
{
break;
}
}
a[end + gap] = tmp;
}
}
}
三. 选择排序
//选择排序(一次选择一个数)
void SelectSort(int *a, int n)
{
int i = 0;
int temp;
for(i = 0; i < n; i++) //i代表选择排序的第一个元素的下标
{
int start = i;
int min = start; //记录最下元素的下标
while(start < n)
{
if(a[start] < n)
min = start; //最小值得小标更新
start++;
}
temp = a[i]; //最小值与参与该趟选择排序的第一个元素交换位置
a[i] = a[min];
a[min] = tmp;
}
}