1.插入排序法
什么是插入排序法呢?
通俗来说就是拿出一个数组中的元素,放在第一为,随后拿出第二个元素与第一个元素相比较,如果比第一个小则插在之前,如果比第一大插在之后,依次进行。
书本定义,插入法其基本原理就是抽出一个数据,在前面的数据中寻找相应的位置插入,然后继续下一个数据,直至完成排序。
元素【0】 | 元素【1】 | 元素【2】 | 元素【3】 | 元素【4】 | ||
初始值 | 8 | 12 | 3 | 21 | 10 | |
第1次排序 | 8 | |||||
第2次排序 | 8 | 12 | ||||
第3次排序 | 3 | 8 | 12 | |||
第4次排序 | 3 | 8 | 12 | 21 | ||
排序结果 | 3 | 8 | 10 | 12 | 21 |
注意:每次拿出来的数都与表格中最前面(也就是最小)的元素相比较,判断插入的位置。
代码实现:
#include <stdio.h>
int main()
{
int i, j = 0;
int temp,count = 0;
int arr[5];
printf("为数组元素赋值:\n");
for (i = 0; i < 5; i++)
{
printf("arr[%d]=", i);
scanf("%d", &arr[i]);
}
for (i = 1; i < 5; i++)
{
temp = arr[i];
count =i- 1;
while (count >= 0 && arr[count] > temp)
{
arr[count + 1] = arr[count];
count--;
}
arr[count + 1] = temp;
}
for (i = 0; i < 5; i++)
{
printf("%d\t", arr[i]);
if (2 == i)
{
printf("\n");
}
}
return 0;
}
注:设计核心是,设置一个嵌套循环,第一层循环主要的任务是:将第二个元素的值赋给中间变量,并记录前一个元素的下标位置。第二层循环的主要任务是:记录的元素的下标位置必须要大于等于第一个元素的下标位置,并且中间变量的值小于设置下标位置的元素,如果满足将当前设置下标的元素值赋给当前的数组元素,然后将下标向前移动一位。
程序运行结果:
2.折半排序法
什么是折半排序法呢?
折半排序又称快速排序,其核心就是选择一个中间值,然后把比中间值小的数据放左边,比中间值大的数据放在右边,然后依次进行排序
元素【0】 | 元素【1】 | 元素【2】 | 元素【3】 | 元素【4】 | ||
初始值 | 9 | 6 | 15 | 4 | 2 | |
第1次排序 | 9 | 6 | 2 | 4 | 15 | |
第2次排序 | 4 | 6 | 2 | 9 | 15 | |
第3次排序 | 4 | 2 | 6 | 9 | 15 | |
第4次排序 | 2 | 4 | 6 | 9 | 15 | |
排序结果 | 2 | 4 | 6 | 9 | 15 |
代码实现:
#include <stdio.h>
void CelerityRun(int left, int right, int arr[])
{
int i, j = 0;
int mid, temp = 0;
i = left;
j = right;
mid = arr[(left + right) / 2];
do
{
while ((arr[i] < mid) && (i < right)) //从左边寻找小于中值的数
{
i++;
}
while ((arr[j]>mid) && (j > left)) //从右边寻找小于中值的数
{
j--;
}
if (i <= j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
} while (i <= j); //如果两边的下标交错,就停止(完成一次循环)
//递归左半边
if (left < j)
{
CelerityRun(left, j, arr);
}
//递归右半边
if (right > i)
{
CelerityRun(i, right ,arr);
}
}
int main()
{
int i = 0;
int arr[5];
printf("为数组元素赋值:\n");
for (i = 0; i < 5; i++)
{
printf("arr[%d]=", i);
scanf("%d", &arr[i]);
}
CelerityRun(0, 4, arr);
for (i = 0; i < 5; i++)
{
printf("%d\t", arr[i]);
if (2 == i)
{
printf("\n");
}
}
return 0;
}
程序运行结果: