C言语冒泡排序算法及代码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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<stdio.h> #include<stdlib.h> #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<n-1; i++) { //每一轮比拟前n-1-i个,即已排序好的最初i个不必比拟 for(int j=0; j<n-1-i; j++) { if(a[j] > 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<n-1; i++) { bool isSorted = true; //每一轮比拟前n-1-i个,即已排序好的最初i个不必比拟 for(int j=0; j<n-1-i; j++) { if(a[j] > 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<N; i++) printf("%d ", num[i]); printf("\n"); system("pause"); return 0; }
本文出自 “11999725” 博客,请务必保留此出处http://12009725.blog.51cto.com/11999725/1843300
以上是关于C言语冒泡排序算法及代码的主要内容,如果未能解决你的问题,请参考以下文章