【Day 23】Bubble sort 范例

不知道大家对於 Bubble sort 的程序有没有甚麽问题呢?
今天,我们就来讨论一下程序码!

我的程序码如下:

#include<stdio.h>
int main(){
	int data[10];
	int i = 0, j = 0, k;
	for(i=0; i<10; i++){
		printf("please input a number>>");
		scanf("%d", &data[i]);
	}
	printf("unsorted:"); 
	for(i=0;i<10;i++)
		printf("%d ",data[i]);
	//bubble sort 
	for(i=0; i<9 ; i++){
		for(j=0; j<9-i-1; j++){
			if(data[j]>data[j+1]){  // change
				data[j]=data[j]^data[j+1];
				data[j+1]=data[j]^data[j+1];
				data[j]=data[j]^data[j+1];
			}
			
		}
		printf("\n");
		printf("i=%d \n",i);
		for(k=0;k<10;k++)
			printf("%d ",data[k]);

	}
	printf("\nsorted:");
	for(i=0;i<10;i++)
	printf("%d ",data[i]);	
	return 0;
}

输出结果:

我的思路:

  1. 首先,我们知道要输入十个数字,所以先宣告一个长度等於 10 的阵列,然後透过昨天的图,也知道 bubble sort 会用到两个回圈,所以宣告两个变数去控制,分别是 ij
  2. 我们利用回圈与 printf() 函式引导使用者输入资料、 scanf() 函式去让使用者输入 10 笔资料、放在阵列中,并先输出未排序的资料。(方便观察资料有没有被放进阵列中)
  3. 开始做 bubble sort。因为我们有十笔资料,外回圈会做九次,内回圈我们用 j<9-i 去控制,因为内回圈的次数是会随着已排序的数字变多而变少,所以在条件的地方可以用 去控制。(忘记的读者可以去看昨天讲解的图回忆一下会更清楚喔!)
  4. 经过 bubble sort 後,我们的资料基本上已经从大到小排序完成了!最後,就是把已排序的资料配合回圈输出~(为了方便读者了解,这里每做一次排序就把资料印出,就可以知道排序的过程了!)

自己写完 bubble sort後,有没有觉得颇有成就感呢?
我个人是觉得 bubble sort 是算比较直观的排序方式,还有其他排序方式,如:插入排序法(Insertion sort)、选择排序法(Selection sort)、快速排序法(Quick sort)等等,有兴趣的读者都可以在网路上找到很多相关资料,在这里我们就先不继续谈。

明天,让我们进入一个比较困难的单元-指标!


<<:  DAY 23 Typography, Hover 以及 Extend

>>:  [Day30] swift & kotlin 总结!双平台差异

EP 05 - [TDD] HashID 计算

Youtube 频道:https://www.youtube.com/c/kaochenlong ...

Day13 - 使用Chip和ChipGroup显示搜寻项目

原本今天是想写解析文章列表的,不过思考了一下,为了让脉络顺一点,决定把今天的内容放到解析文章列表之前...

Day30 - 导入 Next.js 的杂谈与系列文总结

尾声 最後一天想回归到第一天时对自己说的话「看完这些文章的读者能够对 Next.js 有更多的了解,...

Day51. 职责链模式

本文同步更新於blog Chain Of Responsibility Pattern 使多个物件...

[Day29] grid 项目对齐属性

如果熟悉 flexbox 的对齐属性,在这边的用法也是大同小异。在 grid 中因为没有主次轴的概念...