一、冒泡排序
冒泡排序的主要思想在于“两两相比”,每次遍历序列都确定最开始/末尾的元素的位置,直到全部序列都排序完成为止。
冒泡排序一般由两层循环+判断构成。
(1)下潜法
外层循环用于计数每次遍历确定的元素的数量,其范围只需从起始位到倒数第二位即可。
内层循环则是用于遍历去掉确定的元素后的未排序序列,其范围是从序列起始位到未排序序列倒数第二位即可。
判断则是在两两相比的时候判断是否需要将两个相比的元素互换,若后面的元素要放前面,则换位。
Python写法:
# 定义冒泡排序的函数,输入参数为(列表)
def Bubble_Sort(array):
for i in range(len(array)-1):
for j in range(len(array)-1-i):
if array[j] > array[j+1]:
array[j],array[j+1] = array[j+1],array[j]
# 调用方法:
if __name__ == '__main__':
array = [9, 2, 8, 4, 7, 1, 0, 29]
Bubble_Sort(array)
print(array)
C++写法:
#include <iostream>
using namespace std;
//定义冒泡排序函数,输入:(数组,数组长度)
int Bubble_Sort(int *array, int len){
//i是指数组要去掉的最后位的数量
//j是指数组遍历时的位置
for(int i = 0; i < len-1; i++){ //去掉最后被确定的元素
for(int j = 0; j < len-1-i; j++){//遍历数组
if(array[j] > array[j+1]){ //数据交换
int b = array[j];
array[j] = array[j+1];
array[j+1] = b;
}
}
}
}
//调用冒泡排序
int main(){
int a[5] = {8, 6, 3, 9, 2};
int len = sizeof(a)/sizeof(a[0]);
Bubble_Sort(a,len);
for(int k = 0; k < len; k++){
cout << a[k] << ' ';
}
return 0;
}
(2)上浮法
外层循环用于计数每次遍历确定的元素的数量,其范围只需从末位到第二位即可。
内层循环则是用于遍历去掉确定的元素后的未排序序列,其范围是从序列末位到未排序序列第二位即可。
判断则是在两两相比的时候判断是否需要将两个相比的元素互换,若后面的元素要放前面,则换位。
*通常采用下潜法即可,上浮法不常见。
二、选择排序
选择排序的主要思想在于每次选择的元素与剩下的整个序列相比,每次比完之后确定最开始的元素。
在未排序序列中寻找最小/大元素放到排序序列的起始位置,然后在剩余的元素中继续寻找最小/最大的元素放在已排序序列之后,直到每个元素都被确定为止。
选择排序与冒泡排序一样,一般由两层循环+判断构成。
最外层循环用于计数每次遍历后确定的元素的数量,其范围只需从起始位到序列倒数第二位即可。
内层循环用于遍历去除已确定位置的元素后的未排序序列,其范围从第二位开始到末位即可。
判断则是判断当前数是否为未排序序列中的最小/最大值,若需要将后面的元素向前放,则两两互换。
Python方法:
# 定义选择排序函数,输入:(列表)
def Select_Sort(array):
for i in range(len(array)-1): # 确定最开始的数(循环几次就确定几个数)
for j in range(i + 1,len(array)): # 遍历数组
if array[i] > array[j]:
array[i],array[j] = array[j],array[i]
# 调用选择排序
if __name__ == '__main__':
array = [9, 2, 8, 4, 7, 1, 0, 29]
Select_Sort(array)
print(array)
C++方法:
#include <iostream>
using namespace std;
//定义选择排序函数
void Select_Sort(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 b = array[i];
array[i] = array[j];
array[j] = b;
}
}
}
}
//调用选择排序
int main(){
int a[] = {2,4,5,2,1,6,9,3};
int len = sizeof(a)/sizeof(a[0]);
Select_Sort(a,len);
for(int k = 0; k <= len; k++){
cout << a[k] << ' ';
}
return 0;
}