问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#中冒泡排序的算法思想

发布网友 发布时间:2022-05-12 03:59

我来回答

4个回答

热心网友 时间:2022-05-22 02:52

交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
 应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。

冒泡排序

1、排序方法
 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
(1)初始
  R[1..n]为无序区。

(2)第一趟扫描
  从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].key<R[j].key,则交换R[j+1]和R[j]的内容。
 第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。

(3)第二趟扫描
  扫描R[2..n]。扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上……
 最后,经过n-1 趟扫描可得到有序区R[1..n]
注意:
  第i趟扫描时,R[1..i-1]和R[i..n]分别为当前的有序区和无序区。扫描仍是从无序区底部向上直至该区顶部。扫描完毕时,该区中最轻气泡飘浮到顶部位置R[i]上,结果是R[1..i]变为新的有序区。

2、冒泡排序过程示例
 对关键字序列为49 38 65 97 76 13 27 49的文件进行冒泡排序的过程【参见动画演示】

3、排序算法
(1)分析
 因为每一趟排序都使有序区增加了一个气泡,在经过n-1趟排序之后,有序区中就有n-1个气泡,而无序区中气泡的重量总是大于等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行n-1趟排序。
 若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排序过程可在此趟排序后终止。为此,在下面给出的算法中,引入一个布尔量exchange,在每趟排序开始前,先将其置为FALSE。若排序过程中发生了交换,则将其置为TRUE。各趟排序结束时检查exchange,若未曾发生过交换则终止算法,不再进行下一趟排序。

(2)具体算法
void BubbleSort(SeqList R)
{ //R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序
int i,j;
Boolean exchange; //交换标志
for(i=1;i<n;i++){ //最多做n-1趟排序
exchange=FALSE; //本趟排序开始前,交换标志应为假
for(j=n-1;j>=i;j--) //对当前无序区R[i..n]自下向上扫描
if(R[j+1].key<R[j].key){//交换记录
R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE; //发生了交换,故将交换标志置为真
}
if(!exchange) //本趟排序未发生交换,提前终止算法
return;
} //endfor(外循环)
} //BubbleSort

参考资料:http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.3.1.1.htm

热心网友 时间:2022-05-22 04:10

把大数依次往最后面放,然后把最后位置的标记向前移到倒数第二位

热心网友 时间:2022-05-22 05:45

void bubble_sort(int a[],int n)
{
int i,j,k;
bool change;
for(i=n-1,change=TRUE;i>=1&&change;i--)
{
change=FALSE;
for(j=0;j<i;j++)
if(a[j]>a[j+1])
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
change=TRUE;
}
}
}
这样可以保证排好就不用再排了

热心网友 时间:2022-05-22 07:36

private void bubble_sort(int[] a, int size)
{
bool flag = true;
int temp = 0; /* Temporary value for swapping two elements */

for (int i = 0; i < size-1; i++)
{
flag = true;
for (int j = 0; j < size - i - 1; j ++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
flag = false;
} // end if
} // end for j = ...

if (flag == true)
break;

}
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
若cpu一秒执行n次运算需耗能5w,那执行2n次运算要耗能是大于小于还是等于... 大神们,N5G跟N5W哪里不一样? 刚出生的婴儿会感冒吗 刚出生宝宝感冒的症状 怀庄永佳福代理,什么品牌白酒好呢? 做白酒品牌代理,有怀庄永佳福牌子怎么样? 怀庄永佳福白酒喝得人多吗?代理怎么样? 为什么很多女性都把男闺密当作结婚对象? 关于电影“罗生门”的问题 实际利率法是指什么 java冒泡排序算法思想是什么? 金钱树能在室内养吗? 我想养一盆金钱树,放在家里那里比较好呢?如果放在卧室,对身体好么? 投标报价用什么计价方法好 在施工招标时报价方式有哪两种方式 简述投标报价的程序? 小弟想从事游戏开发,但学的是C#,难道要再学C++么?其他哪些需要学? 尿液颜色不正常! 尿的尿颜色很清澈,怎么回事呢 尿由黄变清是怎么回事? 小便颜色发黄,怎么办? 尿尿发黄是怎么回事 尿红色的。 上海高温费是哪几个月 关于尿液的问题 上海高温补贴相关法律规定 关于尿液的颜色怎样才算正常 司法鉴定报告不论哪个部门都在网上查不到吧 现在的尿出来都是黄的,怎么回事啊? 上海高温补贴多少钱一个月 起泡排序和冒泡排序是不是一个概念 求冒泡排序和选择排序,详细请进。 冒泡排序算法的结束条件是什么? ...4,3,8,6,从后往前冒泡,则只想第一趟冒泡排序算法后得到序列为_百度... 算法问题求助:9*9数独问题怎么转换成舞蹈链算法? 做饭用菜刀利用了斜面原理,所以省力,对吗? 菜刀是为了让工作难度降低还是为了省力? 菜刀是省力杠杆还是费力杠杆?初二的杠杆知识…… 广州弱米酒做法几天能出酒 怎样磨菜刀又好又省力? 冰冻过的甜酒煮鸡蛋还能吃吗? 甜酒煮鸡蛋过夜能吃吗 你好,请教个问题。在家给泰迪梳毛一天一次,用什么样的梳子?针梳还是排梳呢?针梳是只有洗完澡才用吗? 客房服务员辞职报告有哪些? 为什么我一喝米酒蛋花就拉肚子 甜酒煮鸡蛋过夜能吃吗? 泰迪熊用什么梳子 服务员辞职报告书怎么写 甛洒和鸡蛋放了一个晚上可以吃吗? 甜酒煮鸡蛋灰色的能吃吗