[算法设计]基本排序

基本排序算法

bubbleSort

关键点:一轮能够确定一个数,内层循环有:a[j]>a[j+1],保证a[j+1]不溢出,第一轮循环需要从i=1开始,内层循环从j=0开始,j<n-i

1
2
3
4
5
6
7
8
9
10
11
12
void BubbleSort(int a[], int n) {//冒泡排序,a为数据数组, n为数组元素个数
int tmp;
for (int i = 1; i < n; ++i) {
for (int j = 0; j < n - i; ++j) {
if (a[j] > a[j + 1]) {//前一个元素大于后一个元素
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
}

selectSort

关键点:与bubble刚好相反,它是从前往后排,所以关键在内层循环的int j=i开始点,而冒泡则是内层循环的j<n-i结束的点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void selectSort(int a[], int n) {//选择排序
for (int i = 0; i < n; ++i) {
int m = i;
for (int j = i; j < n; ++j ) {
if (a[m] > a[j]) {
m = j;
}
}
int tmp = a[i];
a[i] = a[m];
a[m] = tmp;
}
}