C++U3-第1课-基础排序(一)

学习目标

排序的概念 

 本阶段会学习的排序有

 冒泡排序概念

 第一轮比较,与交换

 

例题1:一趟交换

 例题2:多躺比较,冒泡排序

 

【题意分析】
进行n-1趟冒泡排序的过程,每一次输出当前一趟冒泡排序完的结果

【思路分析】
定义一个n,输入当前的n和储存n个数的数组

for循环的方式进行n(n-1)趟排序

如果当前的数大于后面的数,那么交换两数

for循环输出每一次数组的变化

【参考代码】
#include<iostream>
using namespace std;
int a[210];
int main(){
    //定义一个n,输入当前的n和储存n个数的数组 
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){//a[1]~a[n]
        cin>>a[i];
    }
    //for循环的方式进行n(n-1)趟排序 
    for(int i=1;i<=n-1;i++){//根据自己调整是否n-1 
        for(int j=1;j<=n-i;j++){//自己调整是否n-i 
        //如果当前的数大于后面的数,那么交换两数
            if(a[j]>a[j+1]){
                swap(a[j],a[j+1]);
            }    
        }
        //for循环输出每一次数组的变化 
        for(int i=1;i<=n;i++){
            cout<<a[i]<<" ";
        }
        cout<<endl;
    }
    return 0;    
}
View Code

 选择练习题

 

选择排序概念

 选择排序就是每一轮选择最小(或最大)的,然后和没排序部分的第一个进行交换;但选择排序,选择的过程是通过一个个比较得来的;先把没排序部分的第一个当做最小的(记录下标)然后和后面的比,如果有比第一个小的,那么记录新的小值的下标,然后再用新的最小值继续往后比,重复这个过程,就可以比较出最小值,然后交换到未排序部分第一个位置,然后进行多轮,就实现了全部排序;

例题1,一趟选选择

多轮选择动态图;

 

 选择排序代码:

【题意分析】
我们当前需要对数组进行从小到大排序

【思路分析】
可以使用选择排序

定义一个变量为最小值,假设最小值为第一个,然后将当前变量用for循环的方式与每一个数对比,找出最小

再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。

最后输出排序好的数组

【参考代码】
#include <iostream>
using namespace std;

int a[1010];

int main() {
    ////定义n和数组a,并且将n和n个数输入
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    //定义一个变量为最小值,假设最小值为第一个,然后将当前变量用for循环的方式与每一个数对比,找出最小
    for (int i = 1; i <= n-1; i++) { 
        int k = i;  // 最小值的下标 
        for (int j = i; j <= n; j++) {  // 找 a[i]~a[n] 的最小值 
            if (a[j] < a[k]) {
                k = j;    
            } 
        } 
        // 将 a[i]~a[n] 的最小值和 a[i] 交换 
        swap(a[k], a[i]);
    }
    //最后输出排序好的数组
    for (int i = 1; i <= n; i++) {
        cout << a[i] << " ";
    }
    return 0;    
}
View Code

 

posted @ 2023-11-20 12:26  小虾同学  阅读(28)  评论(0编辑  收藏  举报