基本排序算法(冒泡法)

冒泡法时间复杂度:

最好情况:list内元素原本就是有序状态,此时无需移动元素,只需(n-1)次比较,时间复杂度为O(n);

最坏情况:list内元素全部为倒序排列,此时需要(n-1)趟排序,第i趟排序要进行(n-i)次元素对比,每次对比需要移动3次元素位置,时间复杂度为O(基本排序算法(冒泡法));

平均情况:O(基本排序算法(冒泡法));

空间复杂度:冒泡排序借助常数个辅助单元,故空间复杂度为O(1);

算法实现:

#include<stdio.h>

#此函数功能为输入一个常数n,接下来输入n个整型常量,函数将每次输入的n个整型常量由小到大排序。
int main(){
	int n,flag;
	int i,j;
	void exchange(int *a, int *b);
	int buffer[100];
	while(scanf("%d",&n) != EOF){        // 此处使用的循环关闭条件,是为了能多次使用此函数功能,scanf()函数返回的值为:正确按指定格式输入变量的个数,当跳出循环时,ctrl+z即可。
		for(i=0; i<n; i++){
			scanf("%d",(buffer+i));
		}
        #冒泡算法核心部分
		for(i=0; i<n; i++){        // 每趟排序
			flag = 0;                // 此趟排序是否有发生过元素交换,flag初始化为没有交换
			for(j=n-1; j>0; j--){
				if(buffer[j] < buffer[j-1]){        // 交换部分,发生交换则flag变为1
					flag = 1;            
					exchange(buffer+j,buffer+j-1);
				}
			}
			if(flag == 0){        // 未发生交换,代表list元素已经是有序,排序完成
				break;
			}
		}
		printf("The sorted list is:\r\n");
		for(i=0; i<n; i++){
			printf("%d ",buffer[i]);
		}
	}
	
}

#交换两个数的数值,使用指针传参
void exchange(int * a, int * b){
	int temp = *a;
	*a = *b;
	*b = temp;
	return;
}

基本排序算法(冒泡法)
代码运行示例

排序算法是一个稳定的算法,每一趟排序,都会将一个元素放在其最终的位置上。