冒泡排序 & 选择排序(升序)

Posted martin-ch

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序 & 选择排序(升序)相关的知识,希望对你有一定的参考价值。

软件工程上老师讲流程图时,要求画冒泡排序和选择排序的流程图--------问题来了,故想基于百度两种排序后,自我总结的写些什么

 

请将一维数组a[n] 里面的 n个元素  升序排好

---------------------------------------------------------

两种排序的共同点:

外循环:趟数(n-1)  for( i=0; i<n-1; i++ )

内循环:比较次数(在n-1基础上, 每趟后, 减1)   冒泡的 for( j=0; j<n-1-i; j++ )  /  选择的 for( j=i+1; j<n; j++ )

---------------------------------------------------------------------

冒泡排序(升序)

特点:将两个相邻元素进行比较, 前 > 后   交换值! ==========》     为了将 “大” 值 往后面放 (气泡越大越往上浮)

 1 //冒泡排序:
 2 int a[5] = {4,7,5,9,1};    int n = 5;
 3 
 4 int i,j;
 5 int temp;
 6 
 7 for(i=0; i<n-1; i++)    //外循环:趟数(n-1)
 8 {
 9     for(j=0; j<n-1-i; j++)    //内循环:次数(在n-1的基础上,每趟后 减1)
10     {
11         if(a[j] > a[j+1])    //相邻两个元素比较,前>后 交换!
12         {
13             temp = a[j];
14             a[j] = a[j+1];
15             a[j+1] = temp;
16         }
17     }
18 }

流程图:暂略

-----------------------------------------------------------------------------------

选择排序(升序)

特点:定义一个min变量,用来存 “小” 元素  的下标,赋值:①min = i (i=0)。i:外循环, j:内循环;

在待排序的元素中,②内循环:if( a[min] > a[j] )  min = j;  //暂理解为数组元素的下标变了,但 元素的值是没有变的;

找到 “小” 值后,③外循环:if( min != i )  { temp=&a[i];  &a[i]=&a[min];  &a[min]=temp;}  //将 “小”值 放到数组前面,这个元素(已排好序) 不参与后面的(未排好序) 比较了!

 1 //选择排序:
 2 int a[5] = {4,7,5,9,1};    int n = 5;
 3 int i,j,min;
 4 int temp;
 5 
 6 for(i=0; i<n-1; i++)    //外循环:趟数(n-1)
 7 {
 8     min = i;
 9     for(j=i+1; j<n; j++)    //内循环:次数(在n-1的基础上,每趟后 减1)
10     {
11         if(a[min] > a[j])
12             min = j;    //暂理解为数组元素的下标变了,但    元素的值是没有变的
13     }
14 
15     if(min != i)
16     {
17         temp = &a[i];
18         &a[i] = &a[min];
19         &a[min] = temp;
20     }
21 }

流程图:暂略(百度易得,实在懒得自己画了)

以上是关于冒泡排序 & 选择排序(升序)的主要内容,如果未能解决你的问题,请参考以下文章

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)

冒泡排序不打印最后一个元素

[leetcode]排序算法(冒泡排序,选择排序,插入排序,快速排序,计数排序)

冒泡排序VS选择排序

排序算法-(冒泡选择插入算法)

C++ 冒泡排序升序 - 不对所有元素进行排序