C语言:两种简单的排序及其应用(选择排序和冒泡排序)
2018-04-09 11:04
441 查看
在编程初学者的算法学习中,排序问题是可以经常见到的,简单的有两个数排序,或者三个数排序,当学习了数组之后,就会遇到多个数按照一定的顺序(如:升序)进行排序,并输出最终结果。比较简单的两个排序方法是选择排序和冒泡排序。下面一一介绍这两种排序的思路,并展示其编程代码。以数组 a[10]={ 2, 8, 5, 6, 4, 0, 9, 3, 1, 7 } 为例。
选择排序(以非递减排序为例):思路:选定某一个位置上的数字,与位于其后面的数字进行大小比较。例如:选定第0位置的数字 2,与第1位置的数字 8 进行大小比较,因为 2<8,所以不进行位置交换;接下来第0位置的数字 2,与第2位置的数字 5 进行大小比较,因为 2<5,所以不进行位置交换;依此类推;当第0位置的数字 2 与第5位置的数字 0 比较时,因为 2>0,所以两数字交换位置,此时,第0位置的数字为 0,第5位置的数字为 2,此后,第0位置的数字 0 与剩下的数字比较,因为 0 是这10个数中最小的,所以最小的数固定于第0位置。此轮循环比较结束后,数组中的数字排列为{ 0, 8, 5, 6, 4, 2, 9, 3, 1, 7 }。因为第0位置的数字在上一轮的比较过程中已经确定为所有数中的最小的数字,所以在此轮循环比较中,应选定第1位置的数与其后面的数字一一进行比较,按照上一轮的方法,循环比较结束后,数组中的数字排列为{ 0, 1, 8, 6, 5, 4, 9, 3, 2, 7 }。依此类推,进行9轮比较后,就可以使数组a中的数以正确的顺序输出。
下面为正确的代码展示:
冒泡排序(以非递减排序为例)思路:每一轮循环比较,使这一轮循环中最大的数排到最后。(每轮循环中,比较的次数依次递减)例如:在第1轮循环中,经过9次比较,使最大的数9排到本轮循环的最后,在第2轮循环中,经过8次比较,使前9个数中最大的数8排到本轮循环的最后(也就是数字 9 之前),依此类推。下面为正确的代码展示:
应用:(选择排序)此处以选择排序的应用推广为例。在做某些算法题时,你需要确定某些数字序列(或字符序列)中有没有相同的数字,此时就可以运用选择排序的思维,比较这些序列中的元素。
此部分代码只是思路的体现,请读者结合实际情况应用。代码如下:
[b]如果读者觉得我的总结对您的学习有帮助,就劳烦您点一波关注吧!谢谢![/b]文章中无论有何错误,请读者朋友留言指正!谢谢!
[b]感谢读者朋友的阅读![/b]
选择排序(以非递减排序为例):思路:选定某一个位置上的数字,与位于其后面的数字进行大小比较。例如:选定第0位置的数字 2,与第1位置的数字 8 进行大小比较,因为 2<8,所以不进行位置交换;接下来第0位置的数字 2,与第2位置的数字 5 进行大小比较,因为 2<5,所以不进行位置交换;依此类推;当第0位置的数字 2 与第5位置的数字 0 比较时,因为 2>0,所以两数字交换位置,此时,第0位置的数字为 0,第5位置的数字为 2,此后,第0位置的数字 0 与剩下的数字比较,因为 0 是这10个数中最小的,所以最小的数固定于第0位置。此轮循环比较结束后,数组中的数字排列为{ 0, 8, 5, 6, 4, 2, 9, 3, 1, 7 }。因为第0位置的数字在上一轮的比较过程中已经确定为所有数中的最小的数字,所以在此轮循环比较中,应选定第1位置的数与其后面的数字一一进行比较,按照上一轮的方法,循环比较结束后,数组中的数字排列为{ 0, 1, 8, 6, 5, 4, 9, 3, 2, 7 }。依此类推,进行9轮比较后,就可以使数组a中的数以正确的顺序输出。
下面为正确的代码展示:
#include<stdio.h> int main() { int i, j, n, t=0; int a[10]={2, 8, 5, 6, 4, 0, 9, 3, 1, 7}; for(j=0; j<9; j++){ for(i=j; i<9; i++){ if(a[j]>a[i+1]){ t=a[j]; a[j]=a[i+1]; a[i+1]=t; } } } for(n=0; n<10; n++){ printf("%d",a ); if( n!=9 ) printf(" "); } return 0; }
冒泡排序(以非递减排序为例)思路:每一轮循环比较,使这一轮循环中最大的数排到最后。(每轮循环中,比较的次数依次递减)例如:在第1轮循环中,经过9次比较,使最大的数9排到本轮循环的最后,在第2轮循环中,经过8次比较,使前9个数中最大的数8排到本轮循环的最后(也就是数字 9 之前),依此类推。下面为正确的代码展示:
#include<stdio.h> int main() { int a[10]={ 2, 8, 5, 6, 4, 0, 9, 3, 1, 7 }; int i, j, n, t=0; for( i=0; i<10; i++ ){ for( j=0; j<10-i; j++ ){ if( a[j]>a[j+1] ){ t=a[j]; a[j]=a[j+1]; a[j+1]=t; } } } for( n=0; n<10; n++ ){ printf("%d",a ); if(n!=9) printf(" "); } return 0; }
应用:(选择排序)此处以选择排序的应用推广为例。在做某些算法题时,你需要确定某些数字序列(或字符序列)中有没有相同的数字,此时就可以运用选择排序的思维,比较这些序列中的元素。
此部分代码只是思路的体现,请读者结合实际情况应用。代码如下:
#include<stdio.h> int main() { int a[10]={ 2, 8, 5, 6, 4, 2, 9, 3, 1, 7 }; int i, j, t=0; for(i=9; i<9; i++){ for(j=i+1; j<9; j++){ if(a[i]!=a[j]){ t=1; continue; }else{ t=0; break; } } } if(t==1)printf("序列中无重复元素\n"); if(t==1)printf("序列中有重复元素\n"); return 0; }以上所有内容就是两种排序的原理介绍以及应用推广。
[b]如果读者觉得我的总结对您的学习有帮助,就劳烦您点一波关注吧!谢谢![/b]文章中无论有何错误,请读者朋友留言指正!谢谢!
[b]感谢读者朋友的阅读![/b]
相关文章推荐
- c语言的简单排序:选择排序和冒泡排序及他们的优化
- c+两种简单的数组排序,冒泡排序和类似选择排序的思考
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 三种简单排序的实现(冒泡排序,选择排序,插入排序 )
- C语言实现选择排序、直接插入排序、冒泡排序的示例
- 冒泡排序(及其进阶——鸡尾酒排序)与选择排序的算法思想及具体事例
- 排序--简单选择排序思想及其代码实现
- Java中简单的2个排序(冒泡排序,选择排序)
- C语言中选择排序和冒泡排序
- C语言选择排序详解及其实现笔记
- 八大排序方法汇总(选择排序,插入排序-简单插入排序、shell排序,交换排序-冒泡排序、快速排序、堆排序,归并排序,计数排序)
- c语言各种常见排序(直接插入排序、折半插入排序、冒泡排序、选择排序、堆排序)
- 简单的C语言选择排序实现代码
- 我比较喜欢的两种排序方法(冒泡排序、选择排序)
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- C语言中的排序算法--冒泡排序,选择排序,希尔排序
- 数据结构之排序算法一冒泡排序,直接插入排序,简单选择排序
- c语言中冒泡排序、插入排序、选择排序算法比较
- python实现2种简单的排序算法--冒泡排序和选择排序
- (c语言)选择排序与冒泡排序