C++入门教程(10)冒泡排序(for)

排序是软件开发中最常见的算法问题了,给出一组数据,按照要求对其进行排序,或是从小到大,或是从大到小。今天我们就用C++来实现冒泡排序的过程。

实现原理

假设以从大到小的排序方式为例,假设共有N个数(A1......An):

1)依次比较数组中第一个值和后面的所有值,如果第一个数字小于后面的数字,交换两个数字,这样经过N-1次比较后 得到一个最的值在数组的最前面

2)接下来只需要将后面N-1个数排列即可,用第二个数和后面所有数比较,如果第二个数小于后面的数字,就进行交换,得到第二大的数字在第二位

3)重复上面的操作,直到只剩下一个最小的数完成排序

4)总共需要找N-1次最大的值即可完成排序

排序过程

假设有 (1,3,5), 3个数需要从大到小排序,那么排序的过程就是,

首先1和3进行比较,1<3,需要交换 此时变成(3,1,5),

然后3和5进行比较,3<5,需要交换 此时变成(5,1,3),此时选出了最大值5

然后3和1进行比较,1<3,需要交换 此时变成(53,1),此时选出了第二大值3

最后只剩下一个1,结束排序(注意这里总共只需要找到2个最大值(N-1个) )

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

C++代码:

#include 
using namespace std;


void printArray(int *arr,int len)
{
    if (arr == NULL) {
        return;
    }
    if (len <= 0) {
        return;
    }
    for (int i =0 ; i < len; i++) {
        cout<< arr[i] << "," ;
    }
}

//冒泡排序实现 arr 整形数组,len 数组长度,desc 是否是降序排列
void PopSort(int *arr,int len,bool desc)
{
    cout< arr[j])
            {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            cout<< "排序过程";
            printArray(arr,len);
            cout<< endl;
        }
    
    }
   
        
}


int main(int argc, const char * argv[]) {
    // insert code here...
    //std::cout << "Hello, World!\n";
    
    int a[10] = {1,3,6,34,67,12,98,32,23,55};
    
    cout<< "降序排列:" ;
    PopSort(a,10,true);
    cout<

 运行结果:

降序排列:
排列结果:98,67,55,34,32,23,12,6,3,1,
升序排列:
排列结果:1,3,6,12,23,32,34,55,67,98,


验证猜想
降序排列:
排序过程3,1,5,
排序过程5,1,3,
排序过程5,3,1,

排列结果:5,3,1,Program ended with exit code: 0

这里为了方便理解冒泡排序将排序的过程也打印了出来。

如何交换两个数组中的元素

这里有两个不是很好理解的地方一个是for语句,一个是交换两个数组中的元素,为什么是这样的代码:

int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;

这是因为 = 是赋值操作,等号前面的值会被替换成等号后面的值,如果写成以下代码会导致两个元素都为arr[j]的值

arr[i] = arr[j];
arr[j] = arr[i];

如何理解呢,比如说现在有两个杯子,一杯装的82年拉菲,一杯装的是飞天茅台,现在由于服务员的粗心,将白酒杯和红酒杯弄错了,需要将两杯酒换过来,如果直接倒肯定不行了,这个时候需要拿出第三个杯子,先将其中一杯存在这个临时拿出的杯子里面,然后在完成交换,然后再把存入第三个杯子的酒,倒入空的杯子里面,完成交换。

for循环

for(变量;变量停止的条件;每次执行语句后的操作)
{
    语句
}

for循环是非常常用的循环语句,一定要学会使用。for循环一般用于执行指定次数的循环,例如输出100次的 “我爱你”,如果你不嫌麻烦可以复制粘贴100次

cout<<"我爱你!C++"<

但是一个聪明的,正常的程序员,应该学会使用循环来简化代码

    for(int i = 0;i< 100;i++)
    {
        cout<<"我爱你!C++"<

你可能感兴趣的:(C++,c++)