当前位置:首页 » 编程语言 » 冒泡选择排序c语言

冒泡选择排序c语言

发布时间: 2022-08-28 22:43:25

c语言冒泡法和选择法排序

  • 冒泡

#include<stdio.h>

int n,a[1000];

void print()

{

int i;

for(i=1;i<=n;i++)

printf("%d ",a[i]);

printf(" ");

}

void swap(int x,int y)

{

int t;

t=a[x];

a[x]=a[y];

a[y]=t;

print();

}

int main()

{

int i,j;

scanf("%d",&n);

for(i=1;i<=n;i++)

scanf("%d",&a[i]);

for(i=1;i<n;i++)

for(j=n-1;j>=i;j--)

if(a[j]>a[j+1])

swap(j,j+1);

return 0;

}

我也是略懂,随手编的

㈡ C语言中,冒泡排序和选择排序的区别是什么

选择排序每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。 冒泡排序:冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

㈢ c语言选择排序法和冒泡排序法有什么区别

先上选择法和冒泡法:
1.选择法
#include<stdio.h>
void
main()
{
int
i,j,min,temp;
int
a[10];
printf("请输入十个整数:");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
{
min=i;
for(j=i+1;j<=9;j++)
{
if(a[min]>a[j])
{
min=j;
}
temp=a[j];
a[j]=a[min];
a[min]=temp;
}
}
for(i=0;i<=9;i++)
printf("%4d",a[i]);
}
2.冒泡法
#include<stdio.h>
void
main()
{
int
i,j,temp;
int
a[10];
printf("请输入十个整数:");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=0;i<9;i++)
for(j=9;j>i;j--)
{
if(a[j]<a[j-1])
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}/*
for(j=0;j<9-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}大的气泡往下沉,小的气泡往上浮!!!注意:是a[j-1]还是a[j+1];
深刻了解!!!
*/
for(i=9;i>=0;i--)
printf("%4d",a[i]);
}
通过这两个程序,可以发现他们的编程还是有些区别的,但是总结下:
相同点:
1.都要通过n-1组排出具有n个数的顺序;
2.都是通过逐个相比,比出最值的;
。。。
不同点:
1.冒泡法,顾名思义就是把小的泡冒到上面,大的泡沉到下面,最值在中间和其他的值交换;
而选择法,是假定了一个最值,所以最值和其他的值的交换就发生在假定最值的地方;
。。。
其实冒泡法和选择法的区别不大,都是效率比较低的方法。

㈣ C语言排序 选择排序和冒泡排序

几点建议:
1 C语言有自带的qsort,就是实现快速排序的。你应该学习使用它就好了。
2 NODE*records[100]; 只能排序最多100个元素吗?这样的程序没有什么实际意义啊
3 rank函数里,那么多strcpy,如果有bug的话,你可就有得哭了。
4 那个超级长的if语句啊,你没有学过switch语句吗?

㈤ C语言中冒泡排序法和选择排序法有哪些不同

1、冒泡排序法:一趟一趟的将两个相邻的数进行交换如果有10个数则需要排9躺,如果是从
大到小输出则需要每次将后一个数和前一个数进行比较将较大的数赋值给钱一个数,将较小的数赋值给后一个数,其实就是两个数交换,那么第一趟交换完毕后,最
小的数便出现在了数组的最后面,然后进行第二趟的比较时则要对余下的前9个数进行比较,9趟比较完成后则数组也已经排好序。
2、选择排序法:10个数则是需要排9次,若按降序排列,第一次比较:则是将数组的第一个元素与数组中从第二个元素开始到最后的元素进行比较找到最大的数记录下来然后将值赋值给数组的第一个元素,然后进行第二次比较:则是将数组的第二个元素与数组中从第三个元素开始到最后的元素进行比较,找最大的数记录下来将值赋值给数组的第二个元素。。。依次循环找完

㈥ c语言编程:对10个数冒泡排序(升序)。

#include<stdio.h>

intmain(){

intnumber[10]={95,45,15,78,84,51,24,12,34,23};

for(int j=0;j< 9;j++)

for(int i=0;i< 9 -j;i++) {

if(a[i]>a[i+1]) {

int temp=a[i];

a[i]=a[i+1];

a[i+1]=temp; }

}

for(int i=0;i< 10;i++){

printf(“%d”,a[i]); }

}

插入排序

已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、b[2]、……b[m],需将二者合并成一个升序数列。

首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来a[x]的位置这就完成了b[1]的插入。

b[2]~b[m]用相同方法插入。

快速排序

快速排序是大家已知的常用排序算法中最快的排序方法。已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先任取数据a[x]作为基准。

比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据<a[x],a[k+1]~a[n]中的每一个数据>a[x],然后采用分治的策略分别对a[1]~a[k-1]和a[k+1]~a[n]两组数据进行快速排序。

希尔排序

已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。

首先取一增量d(d<n),将a[1]、a[1+d]、a[1+2d]……列为第一组,a[2]、a[2+d]、a[2+2d]……列为第二组……,a[d]、a[2d]、a[3d]……列为最后一组以次类推,在各组内用插入排序,然后取d'<d,重复上述操作,直到d=1。

㈦ C语言中冒泡排序法和选择法的不同是什么本质区别是什么

是这样的
区别主要在交换的方式上
每一轮都把最大或最小的元素筛选出来放在相应的位置上
这是相同的
但是
对于每一轮
比如第一轮
要把1~n
中最大的那个放到n这个位置
冒泡法每次比较和移动相邻的两项
而选择排序每次交换当前项和第n项
我把代码写出来你就懂了:
冒泡:
for
i:=1
to
n-1
do
if
(a[i]>a[i+1])
then
swap(i,i+1);
选择:
for
i:=1
to
n-1
do
if
(a[i]>a[n])
then
swap(i,n);
(swap
表示交换)
总的来说,两种排序比较的次数是相同的
但交换的次数,选择排序是更少的
虽然两者的时间复杂度都是
O(n^2)
但通常,选择排序更快一点

㈧ c语言三种排序

常用的c语言排序算法主要有三种即冒泡法排序、选择法排序、插入法排序

一、冒泡排序冒泡排序:

是从第一个数开始,依次往后比较,在满足判断条件下进行交换。代码实现(以降序排序为例)

#include<stdio.h>

int main()

{

int array[10] = { 6,9,7,8,5,3,4,0,1,2 };

int temp;

for (int i = 0; i < 10; i++)

{//循环次数

for (int j = 0; j <10 - i-1; j++)

{

if (array[j] < array[j+1])

{//前面一个数比后面的数大时发生交换 temp = array[j];

array[j] = array[j+1];

array[j + 1] = temp;

}

}

} //打印数组 for (int i = 0; i < 10; i++) printf("%2d", array[i]); return 0;}}

二、选择排序以升序排序为例:

就是在指定下标的数组元素往后(指定下标的元素往往是从第一个元素开始,然后依次往后),找出除指定下标元素外的值与指定元素进行对比,满足条件就进行交换。与冒泡排序的区别可以理解为冒泡排序是相邻的两个值对比,而选择排序是遍历数组,找出数组元素与指定的数组元素进行对比。(以升序为例)

#include<stdio.h>

int main()

{

int array[10] = { 6,9,7,8,5,3,4,0,1,2 };

int temp, index;

for (int i = 0; i < 9; i++) {

index = i;

for (int j = i; j < 10; j++)

{

if (array[j] < array[index])

index = j;

}

if(i != index)

{

temp = array[i];

array[i] = array[index];

array[index] = temp;

}

for(int i=0;i<10:i++)

printf("%2d"array[i])

return 0;

}

三、快速排序

是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

void QuickSort(int* arr, int size)

{

int temp, i, j;

for(i = 1; i <size; i++)

for(j=i; j>0; j--)

{

if(arr[j] <arr[j-1])

{

temp = arr[j];

arr[j]=arr[j-1];

arr[j-1]=temp;

}

}

}

热点内容
java代码自动编译 发布:2025-01-16 19:58:14 浏览:313
编程很困难 发布:2025-01-16 19:58:09 浏览:673
gg登录源码 发布:2025-01-16 19:58:07 浏览:292
微信收藏表情文件夹 发布:2025-01-16 19:28:57 浏览:15
ra服务器搭建 发布:2025-01-16 19:28:12 浏览:18
javaftp读取 发布:2025-01-16 19:28:02 浏览:185
乐课上传作业 发布:2025-01-16 19:24:58 浏览:936
哈尔滨python培训 发布:2025-01-16 19:19:30 浏览:915
java对象与线程 发布:2025-01-16 19:14:59 浏览:897
二维码源码vc 发布:2025-01-16 19:14:59 浏览:774