无锡响应式网站制作,上海互联网企业100强,如何保护网站域名,成都明腾网站建设公司C语言—冒泡排序 原理过程讲解代码1、直接在主函数里面实现2、编写函数进行实现 原理
冒泡排序的原理是#xff1a;从左到右#xff0c;相邻元素进行比较。每次比较一轮#xff0c;就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序… C语言—冒泡排序 原理过程讲解代码1、直接在主函数里面实现2、编写函数进行实现 原理
冒泡排序的原理是从左到右相邻元素进行比较。每次比较一轮就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序为例第一轮比较后所有数中最大的那个数就会浮到最右边第二轮比较后所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较最后实现从小到大排序。
过程讲解
假设待排序序列为 (5,1,4,2,8)如果采用冒泡排序对其进行升序由小到大排序则整个排序过程如下所示 1) 第一轮排序此时整个序列中的元素都位于待排序序列依次扫描每对相邻的元素并对顺序不正确的元素对交换位置整个过程如下图所示。 可以看到经过第一轮冒泡排序从待排序序列中找出了最大数 8并将其放到了待排序序列的尾部并入已排序序列中。
2) 第二轮排序此时待排序序列只包含前 4 个元素依次扫描每对相邻元素对顺序不正确的元素对交换位置整个过程如下图所示 可以看到经过第二轮冒泡排序从待排序序列中找出了最大数 5并将其放到了待排序序列的尾部并入已排序序列中。
3) 第三轮排序此时待排序序列包含前 3 个元素依次扫描每对相邻元素对顺序不正确的元素对交换位置整个过程如下图所示。 经过本轮冒泡排序从待排序序列中找出了最大数 4并将其放到了待排序序列的尾部并入已排序序列中。
4) 第四轮排序此时待排序序列包含前 2 个元素对其进行冒泡排序的整个过程如下图所示。 经过本轮冒泡排序从待排序序列中找出了最大数 2并将其放到了待排序序列的尾部并入已排序序列中。
5) 当进行第五轮冒泡排序时由于待排序序列中仅剩 1 个元素无论再进行相邻元素的比较因此直接将其并入已排序序列中此时的序列就认定为已排序好的序列如下图所示。
代码
1、直接在主函数里面实现
//假设进行升序排序
#includestdio.h
int main()
{int arr[10] ;for (i 0; i 10; i) //接收用户的数值{scanf(%d, arr[i]);}for (int i 0; i 9; i)//i9进行解释①{for (int j 0; j 9-i; j)//i9-i进行解释②{if (arr[j] arr[j 1])//满足条件进行交换{int temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}}for (int i 0; i 10; i)//打印数组检验排序结果{printf(%d , arr[i]);}return 0;
}2、编写函数进行实现
#includestdio.h
void Bubble_sort(int arr[], int size)
{int j,i,tem;for (i 0; i size-1;i )//size-1是因为不用与自己比较所以比的数就少一个{int count 0;for (j 0; j size-1 - i; j) //size-1-i是因为每一趟就会少一个数比较{if (arr[j] arr[j1])//这是升序排法前一个数和后一个数比较如果前数大则与后一个数换位置{tem arr[j];arr[j] arr[j1];arr[j1] tem;count 1;}}if (count 0) //如果某一趟没有交换位置则说明已经排好序直接退出循环break; }}
int main()
{int arr[10];int i;printf(请输入10个数\n);for (i 0; i 10; i) //接收用户的数值{scanf(%d, arr[i]);}printf(排序前的数组);for (i 0; i 10; i){printf(%d , arr[i]);}printf(\n排序后的数组);Bubble_sort(arr, 10);for (i 0; i 10; i){printf(%d , arr[i]);}return 0;
}