OωO一些比较简单的排序(考试比较常见)

#1. 选择排序
选择排序

其实这也是很多人学C++的第一个接触到的排序方法,大概思路就是初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。----简而言之,每次循环找到最小的放前面。
代码如下:

void findmaxpos(int a[],int n){     //这个函数主要是找出数组内最大的数字对应的下标
int max=a[0];
int pos;                       //用pos记录下标。     
for(int i=0;i<n;i++){
if(a[i]>a[max]){
a[max]=a[i];
pos=i;
};
};
return pos;
}

void selectionSort(int a[],int n){   //这个函数进行将最大值跟每次循环最后一位进行交换
while(n>0){
int pos = findmaxpos(a,n);
int tmp = a[pos];
 a[pos] = a[n-1];
 a[n-1] = tmp;
 n--;
}                               //主要就是一个交换,循环n-1次。

}



冒泡排序
#1. 冒泡排序 (时间复杂度:O(n^2)
冒泡排序在扫描过程中两两比较相邻记录,如果反序(比后者小)则交换,最终,最大记录就被“沉到”了序列的最后一个位置,第二遍扫描将第二大记录“沉到”了倒数第二个位置,重复上述操作,直到n-1 遍扫描后,整个序列就排好序了。
代码如下:

#include<iostream>
using namespace std;
void bull(int a[],int len){
    int tmp;
    for(int i=0;i<len-1;i++){
        if(a[i]>a[i+1]){
            tmp=a[i];
            a[i]=a[i+1];
            a[i+1]=tmp;}
    }
}                      //先写一次冒泡排序,单独执行一次的过程是怎么样的
void bullo(int a[],int len){
    for(int i=len;i>=1;i--){
        bull(a,i);
    }
}                     //写出冒泡要跑几次的循环,这样直接就调用这个实现冒泡排序
int main(){
    int a[]={1,3,4,2,5,8,6,7,9};
    bullo(a,9);
    for(int i=0;i<9;i++){
        cout<<a[i];
    }
return 0;
}

最后修改:2020 年 12 月 13 日 04 : 46 PM
MY Wetchat: