冒泡排序法_冒泡排序的详细过程
最近很多队员在找关于冒泡排序法的解答,今天锺编为大家精心采编10条解答来给大家详细解读! 有97%游戏狂人认为冒泡排序法_冒泡排序的详细过程值得一读!
10条解答
1.冒泡排序法?
冒泡排序,是指计算机的一种排序方法,它的时间复杂度为O(n^2 ,虽然不及堆排序、快速排序的O(nlogn,底数为2 ,但是有两个优点:
1.“编程复杂度”很低,很容易写出代码;
2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。不过,一路、二路归并排序、不平衡二叉树排序的速度均比冒泡排序快,且具有稳定性,但速度不及堆排序、快速排序。冒泡排序是经过n-1趟子排序完成的,第i趟子排序从第1个数至第n-i个数,若第i个数比后一个数大(则升序,小则降序 则交换两数
2.冒泡排序法是如何排序的???
冒泡排序算法的原理:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡排序法
3.冒泡排序的算法
#includestdio.h
void main()
{
int a;
int i,j,t;
printf(输入10个整数:\n);
for( i = 0; i 10; i )
scanf( d,a); //依次输入10个整数
for( j = 0; j 9; j ) //进行9轮排序 即n-1次
{
for( i = 0; i 9-j; i ) //每轮进行n-1-j 次比较,最多n-1-j 次交换
if( a a )
{
t = a ;
a = a; //小的沉底,大的上浮
a = t;
}
}
printf(排序结果:);
for( i = 0; i 10; i ) //依次输出排序结果
printf( d\t,a);
printf(\n);
}
PASCAL为例子
procedure Bubble_Sort(var L:List);
vari,j:position;
begin
for i:=First(L) to Last(L)-1 do
for j:=First(L) to Last(L)-i do
if LL then 4 swap(L,L);
//交换L和L
end;
下面使用c 语言编写
#includeiostream.h
void main()
{
int a,i,j,temp;
cout请输入数字:endl;
for(i=0;i=n;i )
cina; //依次输入n个整数
for(i=0;in;i )
{
for(j=i 1;jn;j
if(aa) //利用临时变量temp交换顺序
{ temp=a;
a=a;
a=temp;
}
couta' '; //依次输出结果
}
下面使用Visual Basic编写
Option Explicit
Private Sub Form_Load()
Dim a, c As Variant
Dim i As Integer, temp As Integer, w As Integer
a = Array
(12, 45, 17, 80, 50)
For i = 0 To UBound(a) - 1
If (a(i) a(i 1)) Then '若是递减,改为a(i)a(i 1)
temp = a(i)
a(i) = a(i 1)
a(i 1) = temp
End If
Next
For Each c In a
Print c;
Next
End Sub
4.冒泡排序算法
从小到大的排序 class Program { public static void Sort(int myArray) { // 取长度最长的词组 - 冒泡法 for (int j = 1; j < myArray.Length;j ) { for (int i = 0; i < myArray.Length - 1; i ) { // 如果 myArray > myArray ,则 myArray 上浮一位 if (myArray >myArray) { int temp = myArray; myArray = myArray; myArray = temp; } } } } static void Main(string args) { int myArray = new int { 10, 8, 3, 5, 6, 7, 4, 6, 9 }; Sort(myArray); for (int m = 0; m < myArray.Length; m ) { Console.WriteLine(myArray); } } 从大到小的排序 class Program { public static void Sort(int myArray) { // 取长度最长的词组 - 冒泡法 for (int j = 1; j < myArray.Length;j ) { for (int i = 0; i < myArray.Length - 1; i ) { // 如果 myArray < myArray ,则 myArray 下沉一位 if (myArray < myArray) { int temp = myArray; myArray = myArray; myArray = temp; } } } } static void Main(string args) { int myArray = new int { 10, 8, 3, 5, 6, 7, 4, 6, 9 }; Sort(myArray); for (int m = 0; m < myArray.Length; m ) { Console.WriteLine(myArray); } }
5.c语言冒泡排序法
(1 基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
(2 实例:
(3 代码解释:
#includestdio.h
int main()
{
int a;
int i,j,t,temp;//temp记录临时中间值
printf(请输入10个数:);
for (i=0;i10;i )
{
scanf( d,a);//记录输入的十个数
}
for (j=1;j=9;j )
{
t=10-j;
for (i=0;it;i )
{
if (aa) {
//?交换两数的位置 ?
temp=a;
a=a;
a=temp;
}
}
}
for (i=0;i=9;i )
{
printf( d\t,a);
}
return 0;
}
!
6.C语言冒泡排序法代码
结果: 代码:#include stdio.hvoid main() { int i, j, temp; int a; for (i = 0; i 10; i ) { scanf( d,, a); } for (j = 0; j 9; j ) { for (i = 0; i 9 - j; i ) { if (a a) { temp = a; a = a; a = temp; } } } for (i = 0; i 10; i ) { printf( d,, a); } printf(\n); }
7.冒泡法排序怎么弄?
For i = 1 To 9 '外层循环遍历数字
For j = 0 To 9 - i '内层循环
If a(j) a(j 1) Then '如果前面的数值大于后面的数值
b = a(j) '将前面的数值存储到变量中
a(j) = a(j 1) '将后面的数值赋给前一个数值
a(j 1) = b '将变量的值再赋给后一个数值End IfNext jNext iFor i = 0 To 9 '循环
Text
1.Text = Text
1.Text CStr(a(i)) '将数组的结果输入到文本框中
If i = 4 Then Text
1.Text = Text
1.Text Chr
(13) Chr
(10) '如果显示的个数超出4个,则换行Next iEnd SubPrivate Sub Command2_Click()
Dim i As Long, l '定义变量
Text
1.Text = '清空文本框中的内容
For i = 0 To 9 '循环输入N: '标签'弹出提示对话框输入数字
l = InputBox(请输入排序的10个数字,这是第 CStr(i 1) 个, 提示, )
If IsNumeric(l) Then '如果输入的是数字
a(i) = l '赋给数组变量Else '否则e69da5e6ba90e799bee5baa631333332643839MsgBox 请输入数字, vbOKOnly, 错误 '弹出提示对话框
GoTo N '跳转到标签NEnd IfNext iEnd Sub 追问: 不是计算机的,呃… 回答: 啊...........那你要什么的啊 追问: 一组数比如25,3,5,6,36,用冒泡法排序需要几步,怎么弄? 回答: 哎,复制算了,其实自己去查就可以了啦冒泡排序,是指计算机的一种排序方法,它的时间复杂度为O(n^2 ,虽然不及堆排序、快速排序的O(nlogn,底数为2 ,但是有两个优点:
1.“编程复杂度”很低,很容易写出代码;
2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。不过,一路、二路归并排序、不平衡二叉树排序的速度均比冒泡排序快,且具有稳定性,但速度不及堆排序、快速排序。冒泡排序是经过n-1趟子排序完成的,第i趟子排序从第1个数至第n-i个数,若第i个数比后一个数大(则升序,小则降序 则交换两数 冒泡排序(BubbleSort 的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数 ,将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的 ,第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数 。如此下去,重复以上过程,直至最终完成排序。 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。 用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a和a标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。
8.冒泡排序法的具体步骤怎么写
对尚未排序的各元素从头到尾依次比较相邻的两个元素是否逆序(与欲排顺序相反 ,若逆序就交换这两元素,经过第一轮比较排序后便可把最大(或最小 的元素排好,然后再用同样的方法把剩下的元素逐个进行比较,就得到了你所要的顺序。可以看出如果有 n 个元素,那么一共要进行 n-1 轮比较,第 i 轮要进行 j=n-i 次比较。(如:有5个元素,则要进行5-1轮比较。第3轮则要进行5-3次比较
9.举例说明冒泡排序法基本原理
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第一次两两比较6 > 2交换(内循环) 交换前状态| 6 | 2 | 4 | 1 | 5 | 9 | 交换后状态| 2 | 6 | 4 | 1 | 5 | 9 | 第二次两两比较,6 > 4交换 交换前状态| 2 | 6 | 4 | 1 | 5 | 9 | 交换后状态| 2 | 4 | 6 | 1 | 5 | 9 | 第三次两两比较,6 > 1交换 交换前状态| 2 | 4 | 6 | 1 | 5 | 9 | 交换后状态| 2 | 4 | 1 | 6 | 5 | 9 | 第四次两两比较,6 > 5交换 交换前状态| 2 | 4 | 1 | 6 | 5 | 9 | 交换后状态| 2 | 4 | 1 | 5 | 6 | 9 | 第五次两两比较,6 < 9不交换 交换前状态| 2 | 4 | 1 | 5 | 6 | 9 | 交换后状态| 2 | 4 | 1 | 5 | 6 | 9 | 第二趟排序(外循环) 第一次两两比较2 < 4不交换 交换前状态| 2 | 4 | 1 | 5 | 6 | 9 | 交换后状态| 2 | 4 | 1 | 5 | 6 | 9 | 第二次两两比较,4 > 1交换 交换前状态| 2 | 4 | 1 | 5 | 6 | 9 | 交换后状态| 2 | 1 | 4 | 5 | 6 | 9 | 第三次两两比较,4 < 5不交换 交换前状态| 2 | 1 | 4 | 5 | 6 | 9 | 交换后状态| 2 | 1 | 4 | 5 | 6 | 9 | 第四次两两比较,5 < 6不交换 交换前状态| 2 | 1 | 4 | 5 | 6 | 9 | 交换后状态| 2 | 1 | 4 | 5 | 6 | 9 | 第三趟排序(外循环) 第一次两两比较2 > 1交换 交换后状态| 2 | 1 | 4 | 5 | 6 | 9 | 交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 第二次两两比较,2 < 4不交换 交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 第三次两两比较,4 < 5不交换 交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 交换后状态| 1 | 2 | 4 | 5 | 6 | 9 | 第四趟排序(外循环)无交换 第五趟排序(外循环)无交换 排序完毕,输出最终结果1 2 4 5 6 9
10.冒泡排序法
用冒泡排序法对n个关键码排序,在最好的情况下也就是数据按关键码排序次序有序,只需要依次从头到尾挨个比较就可以了,因此比较次数为n-1次,关键码不移动,所以0次移动 在最坏的情况下为关键码按排序顺序完全逆序,第k趟都有n-k个关键码比较, 因此数据一共要做n*(n-1)/2次比较,移动次数则为3n*(n-1)/2 这样就是错误A