排序算法参考一(冒泡排序、选择排序)

一、冒泡排序

冒泡排序的主要思想在于“两两相比”,每次遍历序列都确定最开始/末尾的元素的位置,直到全部序列都排序完成为止。

冒泡排序一般由两层循环+判断构成。

(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;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘枫--odin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值