高中信息技术求解冒泡排序法的求解过程,选择排序法

韩立伟 的BLOG
用户名:韩立伟
文章数:279
评论数:66
访问量:245117
注册日期:
阅读量:5863
阅读量:12276
阅读量:389600
阅读量:1080644
51CTO推荐博文
1.冒泡排序(1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。(2)实例:650) this.width=650;" class="fit-image" src="/files/uploadimg/9197.png" width="455" height="238" style="border:0" alt="1409197.png" />package&com.hanchao.
/***********************
&*&冒泡排序
&*&@author:han&&&
&*&@version:1.0&&&&&&&
&*&@created:&&&
&***********************
public&class&BubbleSort&{
&&&&public&static&void&main(String[]&args)&{
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&int[]&a&=&{49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
&&&&&&&&int&temp&=&0;
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&for&(int&i&=&0;&i&&&a.&i++)&{
&&&&&&&&&&&&for&(int&j&=&0;&j&&&a.length&-&1&-&i;&j++)&{
&&&&&&&&&&&&&&&&if(a[j]&&&a[j+1])&{
&&&&&&&&&&&&&&&&&&&&temp&=&a[j];
&&&&&&&&&&&&&&&&&&&&a[j]&=&a[j+1];
&&&&&&&&&&&&&&&&&&&&a[j+1]&=&
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&for&(int&i&=&0;&i&&&a.&i++)&{
&&&&&&&&&&&&System.out.print(a[i]&+&",");
&&&&&&&&&&&&&&&&&&&&
}2.简单选择排序(1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。(2)实例:650) this.width=650;" class="fit-image" src="/files/uploadimg/9193.png" width="498" height="210" style="border:0" alt="1409193.png" />package&com.hanchao.
/***********************
&*&选择排序
&*&@author:han&&&
&*&@version:1.0&&&&&&&
&*&@created:&&&
&***********************
public&class&SelectSort&{
&&&&public&static&void&main(String[]&args)&{
&&&&&&&&&&&&&&&&&
&&&&&&&&int[]&a&=&{1,54,6,3,78,34,12,45};
&&&&&&&&int&position&&=&0;
&&&&&&&&&&&&&&&&&
&&&&&&&&for&(int&i&=&0;&i&&&a.&i++)&{
&&&&&&&&&&&&int&j&=&i&+&1;
&&&&&&&&&&&&position&=&i;
&&&&&&&&&&&&int&temp&=&a[i];
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&for&(;&j&&&a.&j++)&{
&&&&&&&&&&&&&&&&if&(a[j]&&&temp)&{&//如果后一个数小于前一个数
&&&&&&&&&&&&&&&&&&&&temp&=&a[j];
&&&&&&&&&&&&&&&&&&&&position&=&j;
&&&&&&&&&&&&&&&&}
&&&&&&&&&&&&}
&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&a[position]&=&a[i];
&&&&&&&&&&&&a[i]&=&
&&&&&&&&&&&&&&&&&
&&&&&&&&//显示结果
&&&&&&&&for&(int&i&=&0;&i&&&a.&i++)&{
&&&&&&&&&&&&System.out.print(a[i]&+&",");
&&&&&&&&&&&&&&&&&
}3.直接插入排序(1)基本思想:在要排序的一组数中,假设前面(n-1)[n&=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。(2)实例650) this.width=650;" class="fit-image" src="/files/uploadimg/9191.png" width="498" style="border:0" alt="1409191.png" />package&com.hanchao.
/***********************
&*&插入排序
&*&@author:han&&&
&*&@version:1.0&&&&&&&
&*&@created:&&&
&***********************
public&class&InsertSort&{
&&&public&static&void&main(String[]&args)&{
&&&&&&//&&&&int[]&a&=&{49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};&
&&&&&&&&int[]&a&=&{49,38,65,97,76,13,50};&
&&&&&&&&int&temp=0;&&//声明一个临时变量
&&&&&&&&for(int&i=1;&i&&&a.&i++){&
&&&&&&&&&&&int&j=i-1;&
&&&&&&&&&&&temp=a[i];&
&&&&&&&&&&&for(;&j&=0&&temp&a[j];&j--){&
&&&&&&&&&&&&&&&a[j+1]=a[j];&&&&&&&&&&&&&&&&&&&&&&&//将大于temp的值整体后移一个单位&
&&&&&&&&&&&}&
&&&&&&&&&&&a[j+1]=&
&&&&&&&&}&
&&&&&&&&for(int&i=0;i&a.i++)&{
&&&&&&&&&&&&System.out.print(a[i]&+&",");&
&*&1.求从10到100中能被3或5整除的数的和
int&sum&=&0;
for(int&i&=&10;&i&&=&100;&i++)&{
if(i&%&3&==&0&||&i&%&5&==&0)&{
System.out.println(sum);
&*&2.将一个字符串逆序,不要使用反转函数
String&message&=&"he&saw&a&racecar";
StringBuilder&rev&=&new&StringBuilder();
for(int&i&=&message.length()&-&1;&i&&=&0;i--)&{
rev.append(message.charAt(i));
System.out.println(rev.toString());
&*&3.反转一个栈【后进先出】
&*&pop():移除堆栈顶部的对象,并作为此函数的值返回该对象。&
堆栈顶部的对象(Vector&对象中的最后一项)。&
&*&peek():查看堆栈顶部的对象,但不从堆栈中移除它
堆栈顶部的对象(Vector&对象的最后一项)。&
Stack&String&&items&=&new&Stack&String&();
items.push("he");&//栈底
items.push("saw");
items.push("a");
items.push("racecar");&//栈顶
reverseStack(items);
while(items.size()&0)&{
System.out.println("反转后的栈,从栈顶取:"&+&items.pop());
public&static&void&reverseStack(Stack&String&&stack)&{
Queue&String&&rev&=&new&LinkedList&String&();
while(stack.size()&&&0)&{
rev.offer(stack.pop());
while(rev.size()&&&0)&{
stack.push(rev.poll());
//&poll()获取并移除此队列的头,如果此队列为空,则返回&null。
这样也可以哦: public&static&void&main(String[]&args)&{
Stack&String&&stack1&=&new&Stack&String&();
stack1.push("he");
stack1.push("saw");
stack1.push("a");
stack1.push("racecar");
System.out.println("***********************");
Stack&String&&stack2&=&new&Stack&String&();
while(stack1.size()&&&0)&{
stack2.push(stack1.pop());
while(stack2.size()&&&0)&{
System.out.println(stack2.pop());
}本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)简单的排序方法(冒泡排序,选择排序,插入排序) - LAHWF - 博客园
随笔 - 3, 文章 - 0, 评论 - 0, 引用 - 0
对数据进行排序可以方便我们检索数据,例如二分查找法比线性查找法通常要快,然而二分查找只能用于有序的数据。
这里仅仅列出三种简单排序方法的Java实现:冒泡排序,选择排序,插入排序。较为复杂的排序方法如希尔排序,快速排序,归并排序暂不描述。
冒泡排序:
public void BubbleSort(){
for (out = n - 1; out & 1; out--) //外部循环
for (in = 0; in & in++) //内部循环
if(a[in] & a[in + 1]){
//交换位置
int temp = a[in];
a[in] = a[in + 1];
a[in + 1] =
选择排序:
public void SelectionSort(){
int out, in,
for (out = 0; out & n - 1; out++){ //外部循环
//选择初始值作为最小
for (in = out + 1; in & in++)
//内部循环
if (a[in] & a[min])
//一次循环选出最小值的Index
int temp = a[out];
//交换初始值和最小值
a[out] = a[min];
插入排序:
public void InsertionSort(){
for (out = 1; out & out++){
//out is dividing line
int temp = a[out];
//remove marked item
//start shifts at out
while (in & 0 && a[in -1] &= temp){
//until one is smaller
a[in] = a[in - 1]; //shift item right
//go left one positin
a[in] = //insert marked item
以上三种排序方法的时间复杂度都为O(N2)
冒泡排序:交换和比较操作都和N2成正比;
选择排序:将必要的交换次数降为O(N),然而比较次数仍为O(N2);
插入排序:复制的次数大致等于比较的次数,对于随机数据,插入排序比冒泡排序快一倍,比选择排序略快。对于已经有序或者基本有序的数据来说,插入排序要好很多。当数据有序的时候,while循环的条件总是false,所以就变成了外层循环中的一个简单的语句,执行N-1次常用排序法之一 ——冒泡排序法和选择排序法_C++,C语言_ThinkSAAS
常用排序法之一 ——冒泡排序法和选择排序法
常用排序法之一 ——冒泡排序法和选择排序法
内容来源: 网络
语言中,常用的算法有:冒泡排序、快速排序、插入排序、选择排序、希尔排序、堆排序以及归并排序等等。那么从这篇开始,我将分别总结下这几种排序法。
先交代一下,我们将要排序的数组定义为arr[N],即数组arr[]包含N个元素。
## 冒泡排序法(Bubblesort) ##
所谓排序法,就是对一组无序的序列进行有序的排序(从大到小或者从小到大),那么什么叫冒泡排序法,冒泡排序法又是怎么实现数组的有序排列呢。
冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较**(`arr[n],arr[n+1]`),如果前面的数大于后面的数(`arr[n] & arr[n+1]`),那么交换两个元素的位置,把大的数往后移动。这样依次经过一轮比较以后,最大的数将会被交换到最后的位置(arr[n-1])。
先一起再来看看冒泡排序法是怎么排序的。 
数组排序前
第一轮排序
第二轮排序
第三轮排序
第四轮排序
第五轮排序
第六轮排序
第七轮排序
第八轮排序
第九轮排序
可以看到,每一轮的排序,在这一轮中参与比较的元素中最大的数将会浮到最后。而冒泡排序的名字也是从这里来的 。
C语言实现Bubblesort:
void bubblesort(int a[], int m)
int i,j;
int flag = 0;
//设定标志,如果第一次循环比较时没有发生交换,则说明数组是升序排序,不用排序,提前结束循环。
for(i = 0; i & i++)
//外层循环控制循环次数
for(j = 0; j & m-1-i; j++)
//内层循环控制每次循环里比较的次数。
if(a[j] & a[j+1])
tmp = a[j];
a[j] = a[j+1];
a[j+1] =
flag = 1;
if(0 == flag)
printf("No Sortn");
break;
## 选择排序法(Selectionsort) ##
所谓的选择是什么意思呢,选择就是于万千花丛中择其一,在选择排序法中说的就是,每一次循环过程中,通过比较选择出你需要的**最值**。
选择排序法的过程是,通**过比较,选择出每一轮中最值元素,然后把他和这一轮中最最前面的元素交换**,所以这个算法关键是要记录每次比较的结果,即每次比较后最值位置(下标)。
先来看看选择排序的过程:
数组排序前
第一轮循环
第二轮循环
第三轮循环
第四轮循环
第五轮循环
第六轮循环
第七轮循环
第八轮循环
第九轮循环
通过这个过程,我们可以看到,每轮循环过程中,都会找出这个最值元素,下一轮排序时就不用再考虑这个元素了。
C语言实现(Selectionsort)
void selectionsort(int a[],int m)
int i,j;
for(i = 0; i & m-1; i++)//控制循环次数,n个数需要n-1次循环
for(j = i+1; j & j++)
if(a[j] & a[k])
//i不等于k是就证明a[i]不是最小的,
//i等于k时证明a[i]就是本轮比较过程中最小的值
if(i != k)
tmp = a[i];
a[i] = a[k];
a[k] =
## 总结 ##
冒泡排序法是两两依次比较,并做交换,交换的次数多。
选择排序法是每次循环找出最值,循环结束后将最值调整到合适位置,交换的次数少。 
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信1501人阅读
冒泡排序法:
#define _CRT_SECURE_NO_WARNINGS 1
#include&stdio.h&
#include&stdlib.h&
#include&assert.h&
void rank(int arr[], int len)
int i = 0;
int j = 0;
int temp = 0;
for (i = 0; i & len-1; i++)
for (j = 0; j & len-1- j++)
if (arr[j] & arr[j+1])
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] =
int main()
int array[9] = { 9, 8, 7, 4, 16, 5, 6, 3, 1 };
int len = sizeof(array) / sizeof(array[0]);
int i = 0;
rank(array, len);
for (i = 0; i & i++)
printf(&%d&, array[i]);
printf(& &);
system(&pause&);
选择排序法:
#define _CRT_SECURE_NO_WARNINGS 1
#include&stdio.h&
#include&stdlib.h&
#include&assert.h&
void rank(int arr[], int len)
assert(arr);
assert(len);
int i = 0;
int j = 0;
int temp = 0;
for (i = 0; i & len-1; i++)
for (j =i+1; j & j++)
if (arr[i] & arr[j])
temp = arr[i];
arr[i] = arr[j];
int main()
int array[9] = { 9, 8, 7, 4, 16, 5, 6, 3, 1 };
int len = sizeof(array) / sizeof(array[0]);
int i = 0;
rank(array, len);
for (i = 0; i & i++)
printf(&%d&, array[i]);
printf(& &);
system(&pause&);
选择排序法和冒泡排序法的区别:
冒泡排序法:一趟一趟的将两个相邻的数进行交换如果有10个数则需要排9躺,如果是从大到小输出则需要每次将后一个数和前一个数进行比较将较大的数赋值给钱一个数,将较小的数赋值给后一个数,其实就是两个数交换,那么第一趟交换完毕后,最小的数便出现在了数组的最后面,然后进行第二趟的比较时则要对余下的前9个数进行比较,9趟比较完成后则数组也已经排好序。
选择排序法:10个数则是需要排9次,若按降序排列,第一次比较:则是将数组的第一个元素与数组中从第二个元素开始到最后的元素进行比较找到最大的数记录下来然后将值赋值给数组的第一个元素,然后进行第二次比较:则是将数组的第二个元素与数组中从第三个元素开始到最后的元素进行比较,找最大的数记录下来将值赋值给数组的第二个元素。。。依次循环找完
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4108次
排名:千里之外
原创:30篇
(3)(5)(11)(8)(3)

我要回帖

更多关于 冒泡排序法c程序 的文章

 

随机推荐