【入门级-算法-6、排序算法:排序的基本概念冒泡排序】
一、排序概念:是将一组数据按照特定规则重新排列的过程,是计算机科学中最基础且重要的算法之一。
二、排序的基本要素
排序键(Key):是排序过程中用于比较和确定元素顺序的特定数据项或数据属性。
稳定性:排序过程中,相等元素的相对位置是否保持不变
稳定排序:相等元素排序后相对位置不变
不稳定排序:相等元素排序后相对位置可能改变
排序方向:
升序排序(从小到大)
降序排序(从大到小)
时间复杂度:在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。时间复杂度是衡量算法执行时间随输入规模增长而变化的度量标准,是算法分析的核心概念。
空间复杂度:空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,通常用大O符号表示。
设计算法时,时间复杂度和空间复杂度往往存在权衡关系,优秀的算法设计需要在两者之间找到平衡点,有两种常用解决方法:一个是空间换时间,就是说使用额外存储空间来减少计算时间;一个是时间换空间,就是说减少存储空间但增加计算时间,在实际的开发过程中,要根据实际资源的情况进行调整。
三、排序算法分类
1、比较排序
冒泡排序
选择排序
插入排序
希尔排序
归并排序
快速排序
堆排序
2、非比较排序
计数排序
桶排序
基数排序
四、冒泡排序
- 冒泡排序 (Bubble Sort)
原理:重复比较两个相邻的元素,将较大的元素逐步"冒泡"到数组末尾。
举例说明:
将23、8、25、4、11按从小到大输出。
第一趟排序
23 8 25 4 11 原数列
8 23 25 4 11 第一次
8 23 25 4 11 第二次
8 23 4 25 11 第三次
8 23 4 11 25 第四次,即比较结果(每一趟最后一次排序结束后,最大的数据“浮出水面”,即找到最大的数)
第二趟排序
8 23 4 11 原数列(此时已经确定25是最大的数,因此25就不再参与比较)
8 23 4 11 第一次
8 4 23 11 第二次
8 4 11 23 第三次,即比较结果
规律:如果有n个数进行排序,需要则进行n-1趟的比较,在第j趟中进行n-j次相邻两个数的比较。
根据上面的规律,代码实现
main( )
{
int a[10];
int i,j,t;
printf(“input 10 number:\n”);
for (i=0; i<10; i++)
{
scanf(“%d”,&a[i]);
}
printf(“\n”);
for(j=1;j<10;j++)
for( i=0;i<10-j; i++)
if (a[i]>a[ i+1])
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
printf(“the sorted number:\n”);
for ( i=1; i<11; i++)
printf(“%d”,a[i]);
}