冒泡排序
思路: 从小到大,找到集合中最小的放在最左边,在剩下的集合中找到最小的放在最左边以此类推。如何找到最小的?(假定左边第一个数就是最小的,让它依次和它右边的比较,如果右边的比它还小那么就交换位置,然后继续比较,直到完成)
void bubbleSort(int* array, int len)
{
for (int i = 0; i < len - 1; ++i) {
for (int j = i + 1; j < len; ++j) {
if (array[i] > array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
错误的写法
void bubbleSort(int* array, int len)
{
for (int i = 0; i < len; ++i) {
// j < len - 1导致倒数第二个元素和倒数第一个元素不会被比较
for (int j = i + 1; j < len - 1; ++j) {
if (array[i] > array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
选择排序
思路 冒泡排序的升级版,冒泡排序进行交换的数据有很多次,实际上我们把最小的下标存储起来。然后进行一次交换就可以了
void selectSort(int* array, int len)
{
for (int i = 0; i < len - 1; ++i) {
int index = i;
for (int j = i + 1; j < len; ++j) {
if (array[index] > array[j]) {
index = j;
}
}
if (index != i) {
int temp;
temp = array[i];
array[i] = array[index];
array[index] = temp;
}
}
}

被折叠的 条评论
为什么被折叠?



