算法学习-排序

算法学习-排序

冒泡排序(Bubble sort)

  • 基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。

  • 排序过程:两个相邻的数相比较,如果第二个数小,就交换位置。

  • 举例:

  • 排序数组:[10,1,35,61,89,36,55]
    第一次排序:10和1比较,10大于1,交换位置      [1,10,35,61,89,36,55]
    第二趟排序:10和35比较,10小于35,不交换位置  [1,10,35,61,89,36,55]
    第三趟排序:35和61比较,35小于61,不交换位置  [1,10,35,61,89,36,55]
    第四趟排序:61和89比较,61小于89,不交换位置  [1,10,35,61,89,36,55]
    第五趟排序:89和36比较,89大于36,交换位置   [1,10,35,61,36,89,55]
    第六趟排序:89和55比较,89大于55,交换位置   [1,10,35,61,36,55,89]
    第一趟总共进行了六次比较,排序结果:[1,10,35,61,36,55,89]

  • 平均复杂度:O(n2)

  • 代码示例:

int main(void) {
	
	int array[] = { 12,23,21,34,23,4,53,78,89,1 };//定义数组array[]
	
	int n = sizeof(array) / sizeof(array[0]);//存放数组中的元素个数
	
	int i;//比较的轮数
	
	int j;//每一轮比较的次数
	
	int temp;//用于交换数据的临时变量
	
	//for循环进行数组的比较
	for (i = 0; i < n - 1;++i) {
		
		for (int j = 0; j < n - i - 1;++j) {
			
			if (array[j] > array[j + 1]) {
				
				temp = array[j];
				
				array[j] = array[j + 1];
				
				array[j + 1] = temp;
			}
		}
	}
	for (int i = 0; i < n; ++i) {
		
		printf("%d\x20",array[i]);
	}
	printf("\n");
	
	return 0;
}
  • 输出结果是:
    算法学习-排序
  • 优点:比较简单,空间复杂度较低,是稳定的
  • 缺点:时间复杂度太高,效率不好
算法学习-排序算法学习-排序 沉潭意诚 发布了4 篇原创文章 · 获赞 1 · 访问量 207 私信 关注
上一篇:linux下g++从异常中还原异常类型


下一篇:python算法双指针问题:两个有序数组的合并