冒泡排序(普通,加强对比)

1.普通的冒泡排序

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<iostream>
 3 #include<time.h>
 4 using namespace std;
 5 #define MAX 20
 6 //打印数组
 7 void printFunc(int* arr, int len)
 8 {
 9     for (int i = 0; i < len; i++)
10         cout << arr[i] << " ";
11     cout << endl;
12 }
13 //排序
14 void Popsort(int* arr, int len)
15 {
16     //从小到大
17     for (int i = 0; i < len-1; i++)            //要点1.
18     {
19         for (int j = 0; j < len - i - 1; j++)      //要点2.
20         {
21             if (arr[j] > arr[j + 1])           //要点3.
22             {
23                 int temp = arr[j];
24                 arr[j] = arr[j+1];
25                 arr[j + 1] = temp;
26             }
27         }
28     }
29
30 }
31 //创建数组
32 void test03()
33 {
34     int arr[MAX];
35     srand((unsigned int)time(NULL));
36     for (int i = 0; i < MAX; i++)
37     {
38         arr[i] = rand() % MAX;
39     }
40     printFunc(arr, MAX);
41     //排序
42     Popsort(arr, MAX);
43     printFunc(arr, MAX);
44
45 }
46
47
48 int main03()
49 {
50
51     test03();
52
53     system("pause");
54     return EXIT_SUCCESS;
55 }

2.加强版冒泡排序

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include<iostream>
 3 #include<time.h>
 4 using namespace std;
 5 #define MAX 20
 6 //打印数组
 7 void printFunc04(int* arr, int len)
 8 {
 9     for (int i = 0; i < len; i++)
10         cout << arr[i] << " ";
11     cout << endl;
12 }
13 //排序
14 void Popsort04(int* arr, int len)
15 {
16     bool flag = true;            // 要点1.
17     for (int i = 0; i < len - 1 && flag; i++)
18     {
19         flag = false;            // 要点2.
20         for (int j = 0; j < len - 1 - i; j++)
21         {
22             if (arr[j] > arr[j + 1])    //要点3.
23             {
24                 flag = true;
25                 int temp = arr[j];
26                 arr[j] = arr[j + 1];
27                 arr[j + 1] = temp;
28             }
29         }
30     }
31     cout << "新冒泡" << endl;
32 }
33
34
35 //创建数组
36 void test04()
37 {
38     int arr[MAX];
39     srand((unsigned int)time(NULL));
40     for (int i = 0; i < MAX; i++)
41     {
42         arr[i] = rand() % MAX;
43     }
44     printFunc04(arr, MAX);
45     //排序
46     Popsort04(arr, MAX);
47     printFunc04(arr, MAX);
48
49 }
50 int main()
51 {
52
53     test04();
54
55     system("pause");
56     return EXIT_SUCCESS;
57 }

//这两种方法的不同之处在于:(进行排序的次数会不同)

1.普通冒泡: 即使数据是有序的,或排序过程中(还没有进行完,已经有序),但是剩下的排序步骤它还会进行,浪费时间。

2.加强版冒泡:增加了一个标示量(flag);一旦当数组有序后,标示量就变为 false,不会在进行下面的循环,节省了循环次数。

加强版:详细理解(参照上面代码:)

  1)标示量 flag 初始值为 true, 他会进入外层循环,然后就给他赋值为 false;

  2)当在内层循环时,如果此时数据有序,就不会进入 if()判断语句;标示量就不会发生变化, 还为false, 下一次外层循环就不会进入,减少了循环次数

  3)如果此时数据无序, 在内层循环时, 会进入if()判断语句,标示量 发生变化,为 true, 下一次外层循环还会进入, 直至 false为 true 或者 全部循环完毕(此时false肯定也为true了, 因为已经排序完, 数据一定有序了)。

3.冒泡循环的特点:

  1.)每次内层循环完毕,都会把数据中(最大或最小)的元素放到指定的位置

  2.)如第一次内层循环完毕,数据中(最大或最小) 的元素肯定实在数据的开头或结尾(一般是开头,因为大部分人都是从开头进行循环的)。

时间: 2024-10-08 04:51:58

冒泡排序(普通,加强对比)的相关文章

Python vs PHP 冒泡排序和累加求和计算性能测试

测试环境: 处理器i5-3230M,64位Ubuntu 14.04 Python 2.7.6, PHP 5.4.39, PHP 7.0.0-dev(2015/04/21) 测试内容: 冒泡排序:对10个升序的数进行排序,降序输出,循环1百万次. 累加求和:0+1+2+3+...+99999999 冒泡排序测试结果对比: 程序: Python   PHP5       PHP7 耗时: 16.910s  14.715s  8.011s 内存: 35.8m    9.0m       12.5m P

关于数组的几个小题目-冒泡排序、二分查找、直接选择排序、反转数组

1. 实现冒泡排序算法,对比相邻元素,如果满足条件就叫唤元素值,把较小的元素移动到数组前面,把较大的元素移动到数组的后面,这样较小的元素就逐渐从底部上升到顶部,排到前面了. public class zuoye14_maopaopaixu { public static void main(String[] args){ int[] array = new int[]{12,45,21,35,65,24,43}; for(int i=0;i<array.length;i++){ for(int

【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序

又到了金三银四找工作的时间,相信很多开发者都在找工作或者准备着找工作了.一般应对面试,我们无可厚非的去刷下面试题.对于PHPer来说,除了要熟悉自己所做的项目,还有懂的基本的算法.下面来分享下PHP面试中常会问到的算法:冒泡排序和快速排序 冒泡排序:一一对比排序 基本思想: 重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小)错误就把他们交换过来.走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成. 图解: 1.第一次:拿着数组的第一个元素

C#中的个别排序方法

C#学习中的一些算法排序,不完整, @^_^@ -------- 2016-10-23 *************************************************************************************************** 1.冒泡排序 对比相邻的元素值,满足条件就交换两个元素的位置,把较小的移到数组前边,较大的数移到数组后边,这样较小的元素就像气泡上升到前面,较大的像气泡移到后边. 1 class Program 2 { 3 st

让冒泡排序的对比次数更少(js实例)

一般网上的冒泡排序例子是这样的: function bubbleSort(arr) { let i = arr.length; let tempExchangVal = undefined; while (i > 0) { for (let j = 0; j < i - 1; j++) { num++; if (arr[j] > arr[j + 1]) { tempExchangVal = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tempExc

浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)

由于没考虑到一些情况,对以上一些算法做了改进和对比!以及昨晚把希尔排序写错而误以为其效率高过快速排序的糗事,今天一一做了更正和说明,如果你绝得本随笔不是很妥可以尝试看看这http://www.cnblogs.com/maxiaofang/p/3382927.html,有错误或不妥欢迎指正!!共同学习,共同进步!O(∩_∩)O哈哈~ 推荐一段博友分享的排序视频很艺术.很形象.很生动哦(http://www.oschina.net/question/561584_65522) 最近一段时间去武汉参加

PHP之快速排序和冒泡排序性能对比

//冒泡排序 function bubble_sort($arr){ $count = count($arr); for($i=0;$i<$count;$i++){ for($j=$count-1;$j>$i;$j--){ if($arr[$j]<$arr[$j-1]){ $tmp = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $tmp; } } } return $arr; } //快速排序 function quick_sort($a

冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析

冒泡排序 1 //冒泡排序 2 ////////////////////////////////////////////////////////////////////////// 3 void BubleSort(int a[],int n) 4 { 5 int temp; 6 bool flag=false; 7 for (int i=0;i<n;i++) 8 { 9 flag=true; 10 for (int j=0;j<n-i-1;j++) 11 { 12 if(a[j]>a[

内嵌汇编与C/C++实现的冒泡排序,快速排序算法排序500W个数据对比

内嵌汇编是微软为了提高程序的直接操作硬件能力,以及实现大任务程序效率的提高,而嵌入在VC中的,他不依赖于汇编器对内嵌汇编代码进行汇编,这些内嵌汇编代码由C编译器内部实现,可以使程序好像自陷到汇编状态一样.这意味着你如果在C/C++程序中使用了 inline  asm进行 汇编 那么 就注定无法跨平台的,对于没有汇编基础的同学是需要去学习下王爽的8086汇编程序设计.,因为有些时候C++程序员是不得不懂这些东西的 ,否则你永远无法知道编译器为你的函数做了什么,.你还有哪些地方需要优化, 不管处于什