冒泡排序(BubbleSort)算法以及简单选择排序(SelectSort)算法实现(C语言)

Posted bfhonor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序(BubbleSort)算法以及简单选择排序(SelectSort)算法实现(C语言)相关的知识,希望对你有一定的参考价值。

一、冒泡排序

  • 从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即A[i-1]>A[i]),则交换它们,直到序列比较完。称这样过程为“一趟”冒泡排序。

(二)算法实现

//交换
void swap(int &a, int &b){
	int temp = a;
	a = b;
	b = temp;
}

//冒泡排序
void BubbleSort(int A[], int n){
	for(int i=0 ; i<n-1 ; i++){
		bool flag = false;	//表示本趟冒泡是否发生交换的标志
		for(int j=n-1 ; j>i ; j--){//一趟冒泡过程
			if(A[j-1]>A[j]){	//若为逆序
				swap(A[j-1],A[j]);//交换
				flag=true;
			}
		}
		if(flag==false){
			return;		//本次遍历后没有发生交换,说明表已经有序
		}
	}
}

(三)算法性能分析

  • 空间复杂度:O(1)

(四)冒泡排序是否适用于链表?



二、简单选择排序(SelectSort)

  • 选择排序:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列
  • 每⼀趟在待排序元素中选取关键字最小的元素加⼊有序子序列

(一)算法实现

//简单选择排序
void SelectorSort(int A[], int n){
	for(int i=0; i<n-1; i++){//一共进行n-1趟
		int min=i;			//记录最小元素位置
		for(int j=i+1 ; j<n ; j++){//在A[i...n-1]中选择最小的元素
			if(A[j] < A[min]){
				min=j;//更新最小元素位置
			}
		}
		if(min != i){
			swap(A[i],A[min]);//封装的swap()函数共移动元素3次
		}
	}
}

(二)算法性能分析

  • 空间复杂度:O(1)

  • 适用性:既可以用于顺序表,也可用于链表

以上是关于冒泡排序(BubbleSort)算法以及简单选择排序(SelectSort)算法实现(C语言)的主要内容,如果未能解决你的问题,请参考以下文章

排序算法第一篇(简单桶排选择排序冒泡排序快速排序)

算法笔记:冒泡排序

简单的排序算法(冒泡,选择排序,快排,插入排序)

冒泡排序选择排序插入排序快速排序

冒泡排序,算法以及优化

浙江高考VB之排序系列