千家信息网

C言语冒泡排序算法及代码

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,根本思惟及举例阐明冒泡排序的根本思惟就是不时比拟相邻的两个数,让较大的元素不时地往后移。经由一轮比拟,就选出最大的数;经由第2轮比拟,就选出次大的数,以此类推。下面以对 3 2 4 1 停止冒泡排序阐
千家信息网最后更新 2025年02月02日C言语冒泡排序算法及代码

根本思惟及举例阐明

冒泡排序的根本思惟就是不时比拟相邻的两个数,让较大的元素不时地往后移。经由一轮比拟,就选出最大的数;经由第2轮比拟,就选出次大的数,以此类推。
下面以对 3 2 4 1 停止冒泡排序阐明。
第一轮 排序进程
3 2 4 1 (最后)
2 3 4 2 (比拟3和2,交流)
2 3 4 1 (比拟3和4,不交流)
2 3 1 4 (比拟4和1,交流)
第一轮完毕,最大的数4曾经在最初面,因而第二轮排序只需求对后面三个数停止再比拟。
第二轮 排序进程
2 3 1 4 (第一轮排序后果)
2 3 1 4 (比拟2和3,不交流)
2 1 3 4 (比拟3和1,交流
第二轮完毕,第二大的数曾经排在倒数第二个地位,所以第三轮只需求比拟前两个元素。
第三轮 排序进程
2 1 3 4 (第二轮排序后果)
1 2 3 4 (比拟2和1,交流)
至此,排序完毕。

算法总结及完成

关于具有N个元素的数组R[n],停止最多N-1轮比拟;
第一轮,逐一比拟(R[1], R[2]), (R[2], R[3]), (R[3], R[4]), ……. (R[N-1], R[N]) ; 最大的元素会被挪动到R[N]上。
第二轮,逐一比拟(R[1], R[2]), (R[2], R[3]), (R[3], R[4]), ……. (R[N-2], R[N-1]);第二大元素会被挪动到R[N-1]上。
。。。。
以此类推,直到全部数组从小到大排序。
下面给出了冒泡排序的普通完成和优化完成。普通完成是教科书里罕见的完成办法,无论数组能否排序好了,都邑停止N-1轮比拟; 而优化完成,在数组曾经排序好的状况下,会提早加入比拟,减小了算法的工夫复杂度。

纯文本复制
                 #include #include #define N 8 void bubble_sort(int a[],int n); //普通完成 void bubble_sort(int a[],int n)//n为数组a的元素个数 { //必定停止N-1轮比拟 for(int i=0; i a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1]=temp; } } } } //优化完成 void bubble_sort_better(int a[],int n)//n为数组a的元素个数 { //最多停止N-1轮比拟 for(int i=0; i a[j+1]) { isSorted = false; int temp = a[j]; a[j] = a[j+1]; a[j+1]=temp; } } if(isSorted) break; //假如没有发作交流,阐明数组曾经排序好了 } } int main() { int num[N] = {89, 38, 11, 78, 96, 44, 19, 25}; bubble_sort(num, N); //或许运用bubble_sort_better(num, N); for(int i=0; i


0