1.冒泡排序(从小到大)
两两比较相邻的数字,如果左边比右边大就进行交换。
每进行一趟排序可把最大值放在最右边。
//1.冒泡排序
void bubble(vector<int> arr, int n) {
int i;
int tmp;
for(int i = 0; i<=n-1; i++) {
if(arr[i] > arr[i+1]) {
tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
}
}
}
void bubbleSort(vector<int> arr, int n) {
int i;
for(int i = n; i>=1; i--) {
bubble(arr, i);
}
}
2.选择排序
每次找到最大值和最后一个做交换。
//2.选择排序
int findMaxPos(vector<int> arr, int n) {
int index = 0;
for(int i = 0; i<n; i++) {
if(arr[i]>arr[index]) index = i;
}
return index;
}
void selectionSort(vector<int> arr, int n) {
int i;
for(int i = n; i>=1; i--) {
int pos = findMaxPos(arr, i);
int tmp = arr[pos];
arr[pos] = arr[i-1];
arr[i-1] = tmp;
}
}
3.插入排序
将数组分为两段,已经排好序的和未排序的,将未排序的一个个取出来插到前面排好序的里面。
但是代码中无法直接插入数组,需要和前面的比较并移动。
//3.插入排序
void insert(vector<int> arr, int n) {//将第n个数字插到前面
int i = n;
int key = arr[n];
while(arr[i-1] > key) {
arr[i] = arr[i-1];
i--;
if(i == 0) break;
}
arr[i] = key;
}
void insertionSort(vector<int> arr, int n) {//大小为n
int i;
for(i = 1; i<n; i++) {
insert(arr, i);
}
}