第7章 数组-排序算法的函数实现
sort函数实现

sort函数实现排序是计算机科学中最基本的操作之一,而sort函数则是在编程中用于实现排序的常用函数之一。
sort函数的作用是对给定的数据集合进行排序,可以按照升序或降序的方式进行排列。
sort函数的使用非常灵活,可以用于各种数据类型的排序,包括数字、字符串以及自定义的数据结构。
在排序过程中,sort函数会根据指定的排序规则来对数据进行比较,并按照比较结果进行重新排列。
在Python中,sort函数可以直接应用于列表(List)类型的数据。
例如,我们有一个包含多个数字的列表,想要将其中的元素按照升序进行排列,可以使用sort函数来实现。
下面是一个示例代码:```numbers = [5, 2, 8, 1, 9]numbers.sort()print(numbers)```运行以上代码,输出结果为:[1, 2, 5, 8, 9]。
可以看到,sort函数按照升序将列表中的元素重新排列了。
除了升序排列,sort函数还可以实现降序排列。
我们只需要在调用sort函数时,传入一个参数`reverse=True`即可。
下面是一个示例代码:```numbers = [5, 2, 8, 1, 9]numbers.sort(reverse=True)print(numbers)```运行以上代码,输出结果为:[9, 8, 5, 2, 1]。
可以看到,sort函数按照降序将列表中的元素重新排列了。
除了数字类型,sort函数也可以用于排序字符串。
它会根据字符串的ASCII码值进行比较,并按照相应的顺序进行排列。
下面是一个示例代码:```fruits = ["apple", "banana", "orange", "pear"]fruits.sort()print(fruits)```运行以上代码,输出结果为:['apple', 'banana', 'orange', 'pear']。
第七章 数组

例题1:求10名同学的平均分。7_2.c
main( ) { int a[10]; int i ,sum=0,ave; for (i=0;i<10;i++) scanf("%d",&a[i]); /*类型说明符 数组名[常量表达式]
数组名为a,此数组有10个整型元素*/
/* a[0], a[1], a[2], a[3], a[4]
3. 如果输入多个字符串,则可用空格隔开
char str1[20],str2[20],str3[20]; scanf(“%s%s%s”,str1,str2,str3); 输入为 How are you str1中为“How”, str2 中为“are”, str3中为 “you”。
7.3.3字符数组举例: 从键盘输入一行字符串(<20),求字符串中 小写字母的个数。7-6.c main() {char str[20],len=0,i; 求这个字符串 scanf ("%s",str); 的长度? for (i=0; str[i]!='\0';i++) if (str[i]>='a'&&str[i]<='z') len++; printf ("\n%d",len); }
1 2 3 4 5 6 7 8 9 a[8] 10 a[9]
a[0] a[1] a[2] a[3] a[4]
a[5] a[6] a[7]
2. 不允许对数组的大小作动态定义,即数组的大 小不能是变量。 例如:下面是不合法的: int n; float a[n]; 3. 数组元素的使用与变量是一样的。可以赋值, 也可作各种运算,还可以输入和输出。 例如:a [0]=1 ; a[1]=a[0]型_char、实 型_float)的数据外, C语言还提供了构造类型 的数据,它们有:数组类型、结构体类型、共用 体类型。构造类型数据是由基本类型数据按一定 规则组成的。
第7章 减治法(《算法设计与分析(第3版)》C++版 王红梅 清华大学出版社)

比较对象,若 k 与中间元素相等,则查找成功;若 k 小于中间元素,则在中间元
算 法 设
计
素的左半区继续查找;若 k 大于中间记录,则在中间元素的右半区继续查找。不
与 分
析
断重复上述过程,直到查找成功,或查找区间为空,查找失败。
( 第
版 )
k
清 华
大
学
[ r1 … … … rmid-1 ] rmid [ rmid+1 … … … rn ] (mid=(1+n)/2)
Page 4
3
7.1.2 一个简单的例子——俄式乘法
【问题】俄式乘法(russian multiplication)用来计算两个正整数 n 和 m 的乘积
,运算规则:如果 n 是偶数,计算 n/2×2m;如果 n 是奇数,计算(n-1)/2×2m+
m;当 n 等于 1 时,返回 m 的值。
算
法
俄式乘法的优点?
与 分 析
2. 测试查找区间[low,high]是否存在,若不存在,则查找失败,返回 0;
( 第
3. 取中间点 mid = (low+high)/2; 比较 k 与 rmid,有以下三种情况:
版 )
3.1 若 k < rmid,则 high = mid - 1;查找在左半区进行,转步骤2;
清 华
3.2 若 k > rmid,则 low = mid + 1;查找在右半区进行,转步骤2;
Page 12
7.2.2 选择问题
【想法】假定轴值的最终位置是 s,则: (1)若 k=s,则 rs 就是第 k 小元素; (2)若 k<s,则第 k 小元素一定在序列 r1 ~ rs-1 中; (3)若 k>s,则第 k 小元素一定在序列 rs+1 ~ rn 中。
数组随机排序方法

数组随机排序方法数组随机排序是一种常见的算法,它可以将数组中的元素随机排列,从而实现对数组的随机访问。
在实际应用中,随机排序算法被广泛应用于数据挖掘、机器学习、游戏开发等领域。
本文将介绍几种常见的数组随机排序方法。
1. Fisher-Yates算法Fisher-Yates算法,也称为Knuth-Shuffle算法,是一种经典的随机排序算法。
它的基本思想是从数组的末尾开始,每次随机选择一个元素与当前位置的元素交换。
这样,每个元素都有相等的概率被选中,从而实现了随机排序。
具体实现如下:```function shuffle(arr) {for (let i = arr.length - 1; i > 0; i--) {const j = Math.floor(Math.random() * (i + 1));[arr[i], arr[j]] = [arr[j], arr[i]];}return arr;}```2. Lodash库的shuffle方法Lodash是一个流行的JavaScript工具库,它提供了许多实用的函数和方法。
其中,shuffle方法可以实现数组的随机排序。
它的实现原理与Fisher-Yates算法类似,但是使用了更简洁的语法。
具体实现如下:```const shuffled = _.shuffle(arr);```3. sort方法结合Math.random函数sort方法是JavaScript中的一个内置函数,它可以对数组进行排序。
结合Math.random函数,我们可以实现数组的随机排序。
具体实现如下:```function shuffle(arr) {return arr.sort(() => Math.random() - 0.5);}```需要注意的是,这种方法并不是真正的随机排序,因为sort方法是基于比较的排序算法,它的时间复杂度为O(nlogn)。
如果数组中存在相同的元素,它们的相对顺序可能会被打乱。
数组排序c语言函数

数组排序c语言函数1 数组排序数组排序是经常被使用到的一个算法,它通常都有一个特定的目的:在一定的约定下,将数组中的元素以特定顺序排列。
在数据处理中,只有对数据进行排序后,才能进一步处理,从而使用户使用数据更加高效,在c语言中,排序算法是实现此功能的基础,排序函数是语言提供的一种操作。
C语言提供了许多不同的排序函数,例如冒泡排序、插入排序、选择排序等,它们的基本思想和实现方式都有所不同,在对排序算法进行优化时,需要根据具体情况考虑到性能和时间等因素,以达到最优的效果。
冒泡排序是一种简易的排序算法,其原理是将数组中的元素依次两两比较,将较大的数放到右边,较小的数放到左边,重复此过程,直到该数组中的元素从小到大排列完毕。
冒泡排序的操作非常简易,但是由于需要对数组中的每个元素进行比较,所以性能比较差,一般只适合数据量小的排序场景。
插入排序也叫直接插入排序,是一种简单效率比较高的排序算法,其原理是从前往后将元素添加进有序序列,按正确的顺序添加,在尾部添加元素后再对序列整体排序,如此重复,直至所有元素添加完毕,从而将数组有序排列。
由于每次添加元素后只需要对其进行排序,就可以保证前面的有序性,整个排序过程比较快,适用于数据量较大的情况。
选择排序也叫简单选择排序,其原理是从数组中选择最大或最小的元素,放在数组的头部或者尾部,然后继续对数组中的剩余元素进行排序,不断重复,直到所有元素都排序完毕。
由于只需要将数组中的元素分成已排序结果和未排序结果,选择排序和前两者相比,会比较快,操作简洁,但是由于需要多次遍历,性能也不是十分优越。
数组排序是一种常用的基础算法,在工程中往往会结合语言自带的排序函数来实现。
本文就介绍了c语言中实现数组排序的三种函数:冒泡排序、插入排序和选择排序,介绍了它们的操作原理和特点,希望可以帮助大家更好地理解和使用排序算法。
如何在编程中使用函数来实现算法

如何在编程中使用函数来实现算法在编程中,函数是一种非常重要的工具,它可以帮助我们实现各种算法。
本文将探讨如何在编程中使用函数来实现算法。
一、函数的基本概念函数是一段可重复使用的代码块,它接受输入参数并返回输出结果。
函数可以将一个复杂的问题分解成多个小问题,并通过不同的函数来解决这些小问题,最终得到整体的解决方案。
二、函数的定义和调用在编程中,我们需要先定义函数,然后才能调用它。
函数的定义包括函数名、参数列表和函数体。
函数名用于标识函数,参数列表定义了函数接受的输入参数,函数体是实现具体功能的代码。
函数的调用是指在程序中使用函数名和参数列表来执行函数。
通过调用函数,我们可以将函数的功能集成到我们的程序中,并根据需要传递不同的参数来实现不同的功能。
三、函数的参数和返回值函数可以接受零个或多个参数,并且可以返回一个或多个值。
参数是函数的输入,通过参数我们可以向函数传递数据。
返回值是函数的输出,通过返回值函数可以向调用者返回计算结果。
在算法实现中,函数的参数通常用于传递需要处理的数据,而返回值用于返回处理后的结果。
通过将算法分解成多个函数,我们可以更好地组织和管理代码,提高代码的可读性和可维护性。
四、函数实现算法的示例下面我们以一个简单的排序算法为例,演示如何使用函数来实现算法。
假设我们需要实现一个函数,用于对一个整数数组进行升序排序。
我们可以将排序算法分解成两个函数:一个函数用于比较两个数的大小,另一个函数用于对数组进行排序。
首先,我们定义一个比较函数,用于比较两个整数的大小:```int compare(int a, int b) {if (a < b) {return -1;} else if (a > b) {return 1;} else {return 0;}}```接下来,我们定义一个排序函数,用于对整数数组进行排序:```void sort(int[] array, int length) {for (int i = 0; i < length - 1; i++) {for (int j = 0; j < length - i - 1; j++) {if (compare(array[j], array[j + 1]) > 0) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}```在主函数中,我们可以调用排序函数来对数组进行排序:```int[] array = {5, 2, 8, 3, 1};int length = sizeof(array) / sizeof(array[0]);sort(array, length);```通过将排序算法分解成两个函数,我们可以更好地理解和管理代码。
数组排序函数c语言
数组排序函数c语言数组排序函数是计算机编程中常用的一种函数,它的作用是将一个数组中的元素按照一定的规则进行排序。
在C语言中,有多种方法可以实现数组的排序,包括冒泡排序、选择排序、插入排序、快速排序等。
本文将介绍这些排序算法的原理和实现方式。
一、冒泡排序冒泡排序是一种简单直观的排序算法,它的原理是通过比较相邻元素的大小,将较大的元素逐渐“冒泡”到数组的末尾。
具体实现时,我们可以使用两层循环来完成冒泡排序的过程。
外层循环控制比较的轮数,内层循环用于比较相邻元素的大小并进行交换。
经过多轮比较和交换,最终数组中的元素按照从小到大的顺序排列。
二、选择排序选择排序是一种简单但低效的排序算法,它的原理是每次从未排序的元素中选择最小的元素,然后与未排序部分的第一个元素交换位置,这样每一轮都能确定一个最小元素的位置。
具体实现时,我们可以使用两层循环来完成选择排序的过程。
外层循环控制比较的轮数,内层循环用于寻找未排序部分的最小元素并进行交换。
经过多轮比较和交换,最终数组中的元素按照从小到大的顺序排列。
三、插入排序插入排序是一种简单直观的排序算法,它的原理是将一个元素插入到已经排好序的数组中的合适位置。
具体实现时,我们可以使用两层循环来完成插入排序的过程。
外层循环控制待插入的元素,内层循环用于比较已排序部分的元素并进行移动。
经过多轮比较和移动,最终数组中的元素按照从小到大的顺序排列。
四、快速排序快速排序是一种高效的排序算法,它的原理是通过选择一个基准元素,将数组分成两部分,左边部分的元素都小于基准元素,右边部分的元素都大于基准元素,然后递归地对左右两部分进行排序。
具体实现时,我们可以使用递归函数来完成快速排序的过程。
在每一轮排序中,我们选择一个基准元素,将数组分成两部分,并对这两部分进行递归排序。
经过多轮递归排序,最终数组中的元素按照从小到大的顺序排列。
以上是常见的几种数组排序函数的原理和实现方式。
在实际编程中,我们可以根据具体的需求选择合适的排序算法。
_fortran-第七章 过程
Fortran 提供了一个特定机制,使得可以在构建 最终的程序前容易地独立开发和调试子任务。 可以把每个子任务作为独立的程序单元来编码, 该独立程序单元被称为外部过程( external procedure) ,每个外部过程都可以独立于程序 中的其它子任务(过程)来进行编译、调试。 Fortran 中有两种外部过程:子程序 ( subroutine) 和函数子程序( function subprogram)(或者就叫函数, function)
7.1 子程序
SUBROUTINE 语句标志着子程序的开始,定义了子 程序名和相关参数表。子程序名必须遵循标准的 Fortran 命名规则由字母和数字组成,最大长度可以 到31 个字符,但第一个字符必须是字母。参数表含 有一系列变量和/或数组,这些变量、数组的值将从 调用程序传递给子程序。这些变量被称为形参 (dummy agument ,形式参数),子程序实际上没有 为它们真正分配任何内存空间。对从调用程序单元传 递来的实际参数(实参)来说它们仅仅是占位符。
每个子程序是一个独立的程序单元,它开始于 SUBROUTINE 语句,结束于END SUBROUTINE 语句。 当程序调用子程序时,调用程序的执行暂时被 挂起,子程序执行部分开始运行。当运行到子 程序的RETURN 语句或END SUBROUTINE 语 句时,调用程序又开始运行调用子程序语句下 面的程序代码。 任何可执行程序单元都可以调用子程序,包括 另一个子程序。(但是,子程序不能调用它自 身,除非它被定义为递归类型(recursive) )。
Fortran95/2003程序设计
第七章 过程
本章学习目标: • 学习Fortran 语言中的过程如何帮助实现好的程序设 计 • 了解子程序与函数的不同 • 掌握创建和调用子程序 • 理解并学会使用INTENT 属性 • 理解使用地址传递方案实现变量传递 • 理解显式结构的形参数组、不定结构的形参数组和不 定大小的形参数组之间的区别 • 理解为什么不再使用不定大小的数组 • 掌握在过程之间使用模块实现共享数据 • 理解显式接口,以及为什么在模块内部定义过程更好 • 能创建并且调用用户自定义函数 • 掌握如何把Fortran 过程调用参数传递给其他过程。
c语言几种数组排序方法
常用的c语言排序算法主要有三种即冒泡法排序、选择法排序、插入法排序。
一、冒泡排序冒泡排序:是从第一个数开始,依次往后比较,在满足判断条件下进行交换。
代码实现(以降序排序为例)#include<stdio.h>int main(){int array[10] = { 6,9,7,8,5,3,4,0,1,2 };int temp;for (int i = 0; i < 10; i++){//循环次数for (int j = 0; j <10 - i-1; j++){if (array[j] < array[j+1]){//前面一个数比后面的数大时发生交换temp = array[j];array[j] = array[j+1];array[j + 1] = temp;}}} //打印数组for (int i = 0; i < 10; i++) printf("%2d", array[i]); return 0;}}二、选择排序以升序排序为例:就是在指定下标的数组元素往后(指定下标的元素往往是从第一个元素开始,然后依次往后),找出除指定下标元素外的值与指定元素进行对比,满足条件就进行交换。
与冒泡排序的区别可以理解为冒泡排序是相邻的两个值对比,而选择排序是遍历数组,找出数组元素与指定的数组元素进行对比。
(以升序为例)#include<stdio.h>int main(){int array[10] = { 6,9,7,8,5,3,4,0,1,2 };int temp, index;for (int i = 0; i < 9; i++) {index = i;for (int j = i; j < 10; j++){if (array[j] < array[index])index = j;}if(i != index){temp = array[i]; array[i] = array[index]; array[index] = temp; }for(int i=0;i<10:i++) printf("%2d"array[i])return 0;}三、快速排序是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
python数组排序函数
python数组排序函数Python是一种非常流行的编程语言,用于各种应用程序的设计和开发。
Python具有很多内置的函数和模块,可以让开发者更轻松地进行数组排序操作。
对于想要进行数组排序的程序员来说,以下是介绍Python数组排序的详细信息,本文将介绍常见的数组排序函数、排序算法和使用示例。
本文旨在为初学者提供有用的信息,帮助他们更好地掌握Python数组排序的方法。
1、内置排序函数Python中内置的排序函数有两个,分别是:sorted()和sort()。
(1)sorted()Python内置的sorted()函数可以对任意序列进行排序。
该函数会返回一个已排序的序列,但不会修改原来的序列。
语法:sorted(seq, key=None, reverse=False)参数:seq –要排序的序列key –一个函数,用来从元素中提取比较关键字。
默认为 None,即直接比较元素reverse –排序规则,reverse = True 降序, reverse = False 升序(默认)。
示例:使用sorted()函数对列表进行升序排列:lst = [7, 3, 5, 1, 8, 9, 10]sorted_lst = sorted(lst)print(sorted_lst)输出结果:[1, 3, 5, 7, 8, 9, 10]key –用来进行比较的元素,key可接受的参数为一个函数或 lambda 表达式。
2、常用的排序算法在 Python 中,内置的排序函数 sorted() 和 sort() 应该是我们最常用的排序函数,最大的优势就是效率,可以把排序算法写得非常简洁高效。
虽然这两个函数可以满足我们绝大多数排序需求,但了解一些常用的排序算法同样非常有利于我们更深入地理解数组排序。
(1)冒泡排序冒泡排序是一种基础的排序算法,它比较容易理解和实现,在数列数据较少的情况下可以显示出良好的效率。
其基本思路是从数列左边开始,每次比较相邻的两个数,将大的数字向右移动,将小的数字向左移动,直到所有数列排序完成。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ score[i] = aux[j]; } C语言设计精髓
}
交换法排序
用交换法对成绩数组升序排序
int score[5] = {84, 83, 88, 87, 61};
for (i=0; i<n-1; i++)
{
i=0
for (j=i+1; j<n; j++)
{
i=1
if (score[j] < score[i])
"交换score[j]和score[i]"
i=2
int i, j, temp;
for (i=0; i<n-1; i++)
{ for (j=i+1; j<n; j++)
成绩升序排序
{
if (score[j] < score[i]) /*从低到高*/
{
temp = score[j];
score[j] = score[i];
score[i] = temp;
}
C语言设计精髓
84 83 88 87 61 61 83 88 87 84 61 83 88 87 84 61 83 84 87 88 61 83 84 87 88
第7章 数组
C语言设计精髓
选择法排序
void SelectionSort(int score[], int n) /*选择法*/
{
int i, j, k, temp;
归并法排序
原数据
83 84 87 88 61 50 70 60 80 99
第1次合并后 83 84 87 88 50 61 60 70 80 99
第2次合并后
50 60 61 70
80 99
C语言设计精髓
第7章 数组
归并法排序
原数据
83 84 87 88 61 50 70 60 80 99
第1次合并后 83 84 87 88 50 61 60 70 80 99
if (score[i] < score[j])
{ aux[k] = score[i++]; }
//如果第二个数组的当前元素比第一个数组的当前元素小,将第二个数组的当前元素复制到临时数组中
else
{ aux[k] = score[j++]; }
}
//将有序的临时数组存入score中
for (i = left, j = 0; i <= right; i++, j++)
score[i] = temp;
}
}
}
第7章 数组
冒泡法排序
第1遍
84 83 88 87 61 83 84 88 87 61 83 84 88 87 61 83 84 87 88 61
C语言设计精髓
第2遍
83 84 87 61 88 83 84 87 61 88 83 84 87 61 88
第3遍
if (i == m+1)
{ aux[k] = score[j++]; continue; }
//若 j 到达第二个数组的尾部,将第一个数组余下元素复制到临时数组中if源自(j == right+1)
{ aux[k] = score[i++]; continue; }
//如果第一个数组的当前元素比第二个数组的当前元素小,将第一个数组的当前元素复制到临时数组中
对后半部分进行排序
i = (end + start) / 2;
合并前后两部分
MergeSort(score, start, i);
MergeSort(score, i + 1, end);
Merge(score, start, i, end);
}
}
C语言设计精髓
第7章 数组
归并法排序
void Merge(int score[], int left, int m, int right)
第7章 数组
选择法排序
for (i=0; i<n-1; i++)
{
寻找最低分所在下标k的过程
k = i;
for (j=i+1; j<n; j++)
{
if (score[j] < score[k])
记录此轮比较中最低分
所在元素的下标 k = j;
}
若k中记录的最低分位置不在下标i处,则
"交换成绩score[k]和score[i]"
for (i=0; i<n-1; i++)
{ k = i;
成绩升序排序
for (j=i+1; j<n; j++)
{
if (score[j] < score[k])
{
k = j; /*记录最小数下标位置*/
}
}
if (k != i)
/*若最小数不在下标位置i*/
{
temp = score[k];
score[k] = score[i];
50 60 61 70
80 99
第3次合并后
50 60 61 70 83 84 87 88
80 99
第4遍合并后
C语言设计精髓
第7章 数组
归并法排序
void MergeSort(int score[], int start, int end)
{
if (start < end)
{
对前半部分进行排序
int i;
交换相邻元素
for (j=1; j<n-i; j++)
{ if (score[j] < score[j-1]) {
有改进的 方法吗?
temp = score[j];
score[j] = score[j-1];
score[j-1] = temp;
}
}
}
}
第7章 数组
归并法排序
5 24 35 74 222
83 84 61 87 88 83 84 61 87 88
第4遍
83 61 84 87 88
比较相邻的两个数据 若顺序不对,则将其位置交换
第7章 数组
冒泡法排序
C语言设计精髓
void BubbleSort(int score[], int n)
{
int i, j, temp;
for (i=0; i<n-1; i++) {
}
}
}
C语言设计精髓 }
有改进的 方法吗?
第7章 数组
选择法排序
第1遍
84 83 88 87 61
第2遍
61 83 88 87 84
第3遍
61 83 88 87 84
第4遍
61 83 84 87 88
排序结果
C语言设计精髓
61 83 84 87 88
在每一遍比较中,在剩余的待比 较的数中选择一个最小的数与这 个剩余序列的第1个数交换位置
}
}
i=3
C语言设计精髓
n=5 j=1
84 83 88 87 61
j=2
61 84 88 87 83
j=3
61 83 88 87 84
j=4
61 83 84 88 87
第7章 数组
用交换法对成绩数组升序排序
void ChangeSort(int score[], int n) /*交换法排序*/
{
第7章 数组
——排序算法的函数实现
第7章 数组
交换法排序
第1遍
84 83 88 87 61 83 84 88 87 61 83 84 88 87 61 83 84 88 87 61
C语言设计精髓
第2遍
61 84 88 87 83
第3遍
61 83 88 87 84
第4遍
61 83 84 88 87
61 84 88 87 83
{
int aux[100] = {0};
5 19 24 35 23 30 74
int i, j, k; // 分别将 i, j, k 指向各自的首部
left
m
right
for (i = left, j = m+1, k = 0; k <= right-left; k++)
{
//若 i 到达第一个数组的尾部,将第二个数组余下元素复制到临时数组中
19 23 30
C语言设计精髓
第7章 数组
归并法排序
83 84 87 88 61 50 70 60 80 99
C语言设计精髓
第7章 数组
归并法排序
原数据
83 84 87 88 61 50 70 60 80 99
第1次合并后
87 88 50 61 60 70 80 99
C语言设计精髓
第7章 数组
第2次合并后 83 84 87 88
50 60 61 70
80 99
第3次合并后
80 99
C语言设计精髓
第7章 数组
归并法排序
原数据
83 84 87 88 61 50 70 60 80 99
第1次合并后 83 84 87 88 50 61 60 70 80 99
第2次合并后 83 84 87 88
61 83 87 88 84
61 84 88 87 83
第一个数分别与后面所有的数进行比较,若后面的数较小,则交换 后面这个数和第一个数的位置