经典排序之冒泡排序

核心代码:

/*冒泡排序

原始数据: 28, 30, 19, 2, 23

第一趟:

第一次:28, 30, 19, 2, 23

第二次:28, 19, 30, 2, 23

第三次:28, 19, 2, 30, 23

第四次:28, 19, 2, 23, 30

第二趟:

第一次:19, 28, 2, 23, 30

第二次:19, 2, 28, 23, 30

第三次:19, 2, 23, 28, 30

第三趟:

第一次:2, 19, 23, 28, 30

第二次:2, 19, 23, 28, 30

第四趟:

第一次:2, 19, 23, 28, 30

*/

//n个元素比较n-1趟

//每趟比较次数 = 数组元素个数 - 趟数

//给定一个数组

//    int a[5] = {7, 2, 3, 4 ,5};

//    for (int i = 0; i < 5 - 1; i++) {          //比较的趟数

//        for (int j = 0; j < 5 - 1 - i; j++) {  //每趟比较的次数

//            if (a[j] > a[j+1]) {

//                int temp = a[j];

//                a[j] = a[j + 1];

//                a[j + 1] = temp;

//            }

//        }

//    }

//    printf("从小到大排序为:");

//    for (int i = 0; i < 5; i++) {

//        printf("%d  ", a[i]);

//    }

//随机产生一组20个元素的数组取值范围为[20, 40]

int a[20] = {0};

printf("随机产生的一个包含20个元素的数组:\n");

for (int i = 0; i < 20; i++) {

a[i] = arc4random()%(40 - 20 + 1) + 20; //arc4random产生随机数

printf("%d  ", a[i]);

}

for (int i = 0; i < 20 - 1; i++) {              //比较的趟数

for (int j = 0; j < 20 - 1 - i; j++) {     //每趟比较的次数

if (a[j] > a[j + 1]) {

int temp = a[j];

a[j] = a[j + 1];

a[j + 1] = temp;

}

}

}

printf("\n进行冒泡排序,产生一组从小到大顺序的数组:\n");

for (int i = 0; i < 20; i++) {

printf("%d  ", a[i]);

}

时间: 2024-10-07 05:25:33

经典排序之冒泡排序的相关文章

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第

经典排序:冒泡排序+选择排序 小结

经典排序:冒泡排序+选择排序 例 FJUTOJ 1842 冒泡排序 原理是取相邻两个数进行大小比较,判断是否交换. 以从小到大排序为例,冒泡排序就像气泡一样,最小的数慢慢浮上来,最大的数慢慢沉下去.那么完整从头到尾做一次之后最后一位就是原序列中最大的数字了.然后只需要对1~(n-1)个数字进行排序,完成后倒数第二个数字也为原序列的1~n-1元素中最大的值.如此重复,进行n-1次一定能完成排序.参考代码: 1 #include <stdio.h> 2 void BubbleSort(int *,

经典排序之冒泡排序和快速排序

一.冒泡排序 冒泡排序(Bubble Sort)是一种比较经典的排序算法. 之所以称为"冒泡排序" ,是因为在排序中,越大(降序排列)或越小(升序排列)的相邻元素会经由交换逐渐"浮"到前面,有如 水中浮出的水泡,故形象地命名为"冒泡排序". 冒泡排序主要对相邻的两个元素进行比较. 在时间复杂度方面,若数据集的初始状态是正序的,一趟扫描即可完成排序.这时,排序中的比较 次数和移动次数均达到最小值,其时间复杂度O(N). 若数据集的初始状态是反序的,

经典排序算法--冒泡排序

冒泡排序的基本思想: 在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大 的数往下沉 ,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换. 关于程序中4中冒泡排序写法的说明: bubble_sort1:基本的冒泡排序的写法. bubble_sort2:基本冒泡排序的不同写法,基本的冒泡排序是每次遍历,每次缩小范围1,这种办法是每次正向和反向遍历,每次缩小范围2,所以两者的比较次数也是一样的. bubble_so

经典排序算法——冒泡排序

对于一个int数组,请编写一个冒泡排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: 输入数组:[1,2,3,5,2,3],6 输出数组:[1,2,2,3,3,5] class BubbleSort { public: int* bubbleSort(int* A, int n) { // write code here bool flag=true; for(int i=0;i<n && flag;++i) { for(int j=n-

吴裕雄--天生自然数据结构:十大经典排序算法——冒泡排序

冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉.冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中

js三种经典排序:冒泡排序、插入排序、快速排序

冒泡排序: function bubbleSort(arr){ for(var r=1;r<arr.length-1;r++){ for(var i=0;i<arr.length-r;i++){ if(arr[i]>arr[i+1]){ arr[i]+=arr[i+1]; arr[i+1]=arr[i]-arr[i+1]; arr[i]-=arr[i+1]; } } } } bubbleSort(arr); 插入排序: function insertSort(arr){ for(var

经典排序算法

经典排序算法(via  kkun) 经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处 这一系列重点在理解,所以例子什么的都是最简单的情况,难免失误之处,多指教 大多数排序算法都给出了每一步的状态,以方便初学者更容易理解,通俗易懂,部分难以理解的排序算法则给出了大量的图示,也算是一个特色吧 经典排序算法 - 快速排序Quick sort 经典排序算法 - 桶排序Bucket sort 经典排序算法 -  插入排序Insertion sort 经典排序算法 - 基数排序Radix so

【转】经典排序算法

地址:http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html 大多数排序算法都给出了每一步的状态,以方便初学者更容易理解,通俗易懂,部分难以理解的排序算法则给出了大量的图示,也算是一个特色吧 经典排序算法 - 快速排序Quick sort 经典排序算法 - 桶排序Bucket sort 经典排序算法 -  插入排序Insertion sort 经典排序算法 - 基数排序Radix sort 经典排序算法 - 鸽巢排序Pigeonho