新手讲算法 冒泡排序,插入排序,选择排序
1.冒泡排序
(1)每次比较相邻的两个元素,按照对应的顺序进行交换
(2)遍历的次数是 n 次,每次遍历进行的比较次数 是 n次,所以复杂度 n*n
(3)进行优化:如果某一次比较之后,没有一次交换,说明此时数组已经有序了
#include<iostream>
#include <algorithm>
using namespace std;
void swap(int *a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void bubbleSort(int *a, int N) {
for(int i = 0; i < N; i++) {
int flag = false;
for(int j = 0; j < N - 1 - i; j++) {
if(a[j] > a[j + 1]) {
swap(a, j, j + 1);
flag = true;
}
}
if(!flag) {
return;
}
}
}
int main(){
int N;
cin>> N;
int *a;
a = new int[N];
for(int i = 0; i < N; i++) {
cin>>a[i];
}
bubbleSort(a, N);
for(int i = 0; i < N; i++) {
cout<<a[i]<<' ';
}
return 0;
}
2.插入排序
(1)不停地将 数字插入到 前面已经有序的数组中
#include<iostream>
#include <algorithm>
using namespace std;
void swap(int *a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void insertSort(int *a, int N) {
for(int i = 0; i < N - 1; i++) {
for(int j = i + 1; j > 0; j--) {
if(a[j] < a[j - 1 ]) {
swap(a, j, j - 1);
} else {
break;
}
}
}
}
int main(){
int N;
cin>> N;
int *a;
a = new int[N];
for(int i = 0; i < N; i++) {
cin>>a[i];
}
insertSort(a, N);
for(int i = 0; i < N; i++) {
cout<<a[i]<<' ';
}
return 0;
}
3.选择排序
(1)每一次选择剩余数组中的一个最小的数字,按顺序放到该放的位置上
#include<iostream>
#include <algorithm>
using namespace std;
void swap(int *a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
void chooseSort(int *a, int N) {
for(int i = 0; i < N; i++) {
//记最下的坐标
int min = i;
for(int j = i; j < N; j++) {
if(a[j] < a[min]) {
min = j;
}
}
swap(a, i, min);
}
}
int main(){
int N;
cin>> N;
int *a;
a = new int[N];
for(int i = 0; i < N; i++) {
cin>>a[i];
}
chooseSort(a, N);
for(int i = 0; i < N; i++) {
cout<<a[i]<<' ';
}
return 0;
}

浙公网安备 33010602011771号