新手讲算法 冒泡排序,插入排序,选择排序
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; }