0
点赞
收藏
分享

微信扫一扫

C语言学习--插入排序法,折半排序法

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;
}

注:设计核心是,设置一个嵌套循环,第一层循环主要的任务是:将第二个元素的值赋给中间变量,并记录前一个元素的下标位置。第二层循环的主要任务是:记录的元素的下标位置必须要大于等于第一个元素的下标位置,并且中间变量的值小于设置下标位置的元素,如果满足将当前设置下标的元素值赋给当前的数组元素,然后将下标向前移动一位。

程序运行结果:​​C语言学习--插入排序法,折半排序法_折半排序法


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;
}

程序运行结果:

C语言学习--插入排序法,折半排序法_插入排序法_02

举报

相关推荐

0 条评论