加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

冒泡排序和直接选择排序

发布时间:2020-12-15 06:47:16 所属栏目:百科 来源:网络整理
导读:? #includestdio.hint Array[100];void SortArray(int Array[],int n)//小到大排,直接选择排序{int i,j,t;for(i = 0; i n-1; i++){for(j = i+1; j n; j++){if(Array[i] Array[j]){t = Array[j];Array[j] = Array[i];Array[i]=t;}}}}void SortArray1(int Arr
?
#include<stdio.h>

int Array[100];

void SortArray(int Array[],int n)//小到大排,直接选择排序
{
	int i,j,t;
	for(i = 0; i < n-1; i++)
	{
		for(j = i+1; j < n; j++)
		{
			if(Array[i] > Array[j])
			{
				t = Array[j];
				Array[j] = Array[i];
				Array[i]=t;	
			}		
		}	
	}
}

void SortArray1(int Array[],int n)//小到大排,冒泡排序
{
	int i,t;
	for(i = 0; i < n-1; i++)
	{
		for(j = 0; j < n-i-1; j++)
		{
			if(Array[j] > Array[j+1])
			{
				t = Array[j];
				Array[j] = Array[j+1];
				Array[j+1]=t;	
			}		
		}	
	}
}
int main()
{
	int i,n;
	while(1)
	{
		printf("请输入一共要输入的数字数n:n");
		scanf("%d",&n);
		printf("请输入一串数字:n");
		for(i = 0; i < n; i++)
			scanf("%d",&Array[i]);
		SortArray1(Array,n);
		printf("输出从大到小的排序:n");
		for(i = 0; i < n; i++)
			printf("%3d",Array[i]);
		printf("nnn");	
	}

return 0;

}


SortArray这种是http://www.neu.edu.cn/cxsj/case/case7.html上面flash演示的(但代码不是,代码是相邻比较的冒泡排序)

这是直接选择排序法

 在直接选择排序中,共需要进行n-1次选择和交换,每次选择需要进行 n-i 次比较 (1<=i<=n-1),而每次交换最多需要3次移动,因此,总的比较次数C=1/2(n*n - n),

  总的移动次数 3(n-1).由此可知,直接选择排序的时间复杂度为 O(n*n),所以当记录占用字节数较多时,通常比直接插入排序的执行速度快些。

  由于在直接选择排序中存在着不相邻元素之间的互换,因此,直接选择排序是一种不稳定的排序方法。

?

SortArray1 这种是冒泡排序

若记录序列的初始状态为"正序",则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次交换,且不移动记录;反之,若记录序列的初始状态为"逆序",则需进行n(n-1)/2次比较和记录移动。因此冒泡排序总的时间复杂度为O(n*n)。

?

直接选择排序法和冒泡排序都很相似,时间复杂度也是O(n*n)。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读