冒泡排序(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语言)的主要内容,如果未能解决你的问题,请参考以下文章