作为一个学习软件工程的小白,今年大二了,感觉自己还在程序设计的边缘晃荡,有点危险。怎么办呢?只能想尽办法地让自己的脑子动起来,去思考。这篇博客主要是写关于排序的不同算法,希望自己认认真真地全都记下来✌
冒泡排序
学排序时的第一个算法就是冒泡排序了,它的时间复杂度为O( n 2 n^2 n2),这里我只写了从小到大排序的算法,从大到小只是动动手指就能解决的小事啦
解释一下冒泡排序的原理:
冒泡排序用第一个元素和第二个元素比较,用第二个元素和第三个元素比较……,如果前一个元素大于后一个二者交换位置,这样最先确定下来的是最后一个元素(也就是最大的元素);那么,最后一个元素就在第一层循环之后确定了,以此类推
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int *array = new int [n];
for(int i = 0; i < n; i++)
cin >> array[i];
int tmp = 0;
for(int i = 0; i < n; i++){
for(int j = 0 ; j < n - i - 1; j++){
if(array[j] > array[j+1]){
tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
for(int i = 0; i < n; i++)
cout << array[i] << "\t";
}
选择排序
本来以为自己写的这个程序是冒泡排序,但是仔细想一想好像没有bubble,bubble的过程,立马ctrl+c,ctrl+v,好怕自己搞一些技术性的错误?,这个应该是选择排序没错了
解释一下选择排序的原理:
选择排序经过两层循环,在第二层循环中用一个临时变量记住第一层循环中的数组对应的数,然后用这个临时变量和它之后的所有元素进行比较,如果有比它小的数,两者交换位置;
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int *array = new int [n];
for(int i = 0; i < n; i++)
cin >> array[i];
for(int i = 0; i < n; i++){
for(int j = i+1; j < n; j++){
int tmp = array[i];
if(tmp > array[j]){
array[i] = array[j];
array[j] = tmp;
}
}
}
for(int i = 0; i < n; i++){
cout << array[i] << " ";
}
}