排序算法总结

1.冒泡排序

基本思想:两数比较,较大数后移,较小数前移
平均时间复杂度:O(n^2)
代码实现:

void BubbleSort(int arr[],int len) {
	for (int i = 0; i < len - 1; i++) {
		for (int j = 0; j < len - 1 - i; j++) {
			if (arr[j] > arr[j + 1]) {
				swap (arr[j], arr[j + 1]);
			}
		}
	}
}

存在问题:数组有序后,冒泡排序可能会继续下一轮循环,直到满足退出条件
优化方案:若本轮没有发生两数交换,则退出循环

void BubbleSort(int arr[],int len) {
	int flag;
	for (int i = 0; i < len - 1; i++) {
		flag = 0
		for (int j = 0; j < len - 1 - i; j++) {
			if (arr[j] > arr[j + 1]) {
				flag = 1;/*发生两数交换,flag 置为 1*/
				swap (arr[j], arr[j + 1]);
			}
		}
		if (flag == 0) {
			break;
		}
	}
}

2.选择排序

基本思想:第 i 次遍历数组,找出最小的数值与第 i 个元素交换
平均时间复杂度:O(n^2)
代码实现:

void sort(int a[],int n){
	int i,j,min,t;
	for(i=0;i<n-1;i++){
		min=i;
		for(j=i+1;j<n;j++){
			if(a[j]<a[min]){
				min=j;
			}
		}
		if(min!=i){
			t=a[i];
			a[i]=a[min];
			a[min]=t;
		}
	}
}

参考资料:排序算法总结

posted @ 2020-03-05 23:20  dump16  阅读(173)  评论(0)    收藏  举报