排序法(选择排序法和冒泡排序法)——以C语言为舟

排序方法的思想(即算法)在各种语言中都是一样的,因此,知一而懂多。接下来,我们将以C语言为载体介绍两种排序方法的主要算法

  • 选择排序法
    选择排序法的主要思想是将一组数(n个)中的最大值(或最小值)先挑出来,放在首(或尾),然后在剩下的n-1个数中再次挑出最大值(或最小值),放在前一个最大值(或最小值)的前面(或后面),以此类推。所以安排两层循环,一层固定一个数的时候,另一层逐次比较。
#include

int main(void)
{
	int a[10],n=10;
	int i,j,m;
	for(i=0;ia[j]){
				m=a[i];//注意,此处的位置对调需要中间变量来辅助 
				a[i]=a[j];
				a[j]=m;
			}
		}
	}
	for(i=0;i<10;i++){
		printf("%d ",a[i]);
	}
	printf("\n");
	return 0;
} //从小到大

排序法(选择排序法和冒泡排序法)——以C语言为舟_第1张图片

  • 冒泡排序法
    冒泡排序法的主要思想是(此处以从小到大排序为例)先指定首尾为最小值,然后遍历数组内的元素,使得每后面一个都与前面一个比较大小,如果后面的数比前面一个小,就让二者交换位置,然后接着与后一位比较,每便利一次,都会使得最后一位为该次遍历中的最大值,然后以此类推。
#include

int main(void)
{
	int a[10],n=10;
	int i,j,m;
	for(i=0;i0;i--){
		for(j=0;j

排序法(选择排序法和冒泡排序法)——以C语言为舟_第2张图片
冒泡排序法的优化方法:记录最后一次的交换位置,之后的就不用交换,如此便可以减少遍历次数,达到优化的目的。
优化后的源代码为:

#include

int main(void)
{
	int a[10],n=10,it;
	int i,j,m;
	for(i=0;i0;i=it){//此处i的取值被判断语句控制 
		for(j=0;j

排序法(选择排序法和冒泡排序法)——以C语言为舟_第3张图片
注:别看优化后的时间比优化前的用时少就觉得不靠谱,这个上面显示的时间包括我输入数组的时间,每次我输入数组的时间是不一样的,自然这上面的时间不足以反映哪个运行得快。

  • 区别:
    从源代码上来看,两种方法①都使用了双层循环,②也使用了中间变量来使得两个位置的数进行交换,※但值得注意的是二者在循环体内判断比较的对象不同☟

▶选择排序法是固定一层(固定i即为指定一个元素),然后在另一层(即为数组中除指定的数之外的数)依次寻找数与指定的数比较大小并不断有改变位置的机会。
▶冒泡选择法则是不断划定一个区域(区域范围),在这个区域内不断比较交换位置。

你可能感兴趣的:(C语言)