求 c语言选择排序法和 冒泡排序法代码!

2024-11-01 13:07:04
推荐回答(5个)
回答1:

选择法的算法: 假设需要对10个数进行排序,那么首先找出10个数里面的最小数,并和这个10个数的第一个(下标0)交换位置,剩下9个数(这9个数都比刚才选出来那个数大),再选出这9个数中的最小的数,和第二个位置的数(下标1)交换,于是还剩8个数(这8个数都比刚才选出来的大).. 依次类推,当还剩两个数时,选出两个数的最小者放在第9个位置(下标8),于是就只剩下一个数了。这个数已经在最后一位(下标9),不用再选择了。所以10个数排序,一共需要选择9次(n个数排序就需要选择n-1次)。#include "Stdio.h"void main(){ void sa(int array[],int n); int array[10],i; printf("enter the array:\n"); for(i=0;i<10;i++) scanf("%d",&array[i]); sa(array,10); printf("the sorted array:\n"); for(i=0;i<10;i++) printf("%d\t",array[i]); getch();}void sa(int array[],int n){ int i,j,k,temp; for(i=0;i<10;i++) { k=i; for(j=i+1;j
main() { int i,j,temp; int a[10]; for(i=0;i<10;i++) scanf ("%d,",&a[i]); for(j=0;j<=9;j++) { for (i=0;i<10-j;i++) if (a[i]>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp;} } for(i=1;i<11;i++) printf("%5d,",a[i] ); printf("\n"); }--------------冒泡算法冒泡排序的算法分析与改进 交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。 应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。 冒泡排序 1、排序方法 将被排序的记录数组R[1..n]垂直排列,每个记录R看作是重量为R.key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。 (1)初始 R[1..n]为无序区。 (2)第一趟扫描 从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].key=i;j--) //对当前无序区R[i..n]自下向上扫描 if(R[j+1].key
勤奋一点网上都可找到,这是帮你拷的。祝你进步!

回答2:

选择排序:

void select_sort(int a[],int n)        //传入数组的要排序的元素个数

{int i,j,min,t;

for(i=0;i

{  min=i;      //min:当前最小值下标

for(j=i+1;j

if(a[min]>a[j])        //若有其它元素更小,就记录其下标

min=j;

if(min!=i)        //保若最小值不在排序区首位,就换到首位

{t=a[min]; a[min]=a[i]; a[i]=t;}

}

}

冒泡排序:

void bubble_sort(int a[], int n)        //传入数组的要排序的元素个数

{ int i, j, t;

for (j=0; j

for (i= 0; i

if(a[i]>a[i+1])          //若大小顺序不符,就交换

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

}

回答3:

//冒泡排序
#include
#include
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
main()
{while(1){
int m;
printf("\n\n*************_冒泡排序_***************");
printf("\n请输入数组的下标m:\n");
scanf("%d",&m);
int i,a[m];
printf("请输入数组数据:\n");
for (i=0;i scanf("%4d",&a[i]);

int s,b;
for (s=0;s {
for (b=0;b {
if(a[b]>a[b+1])
{

int *p,*q;
p=&a[b];
q=&a[b+1];
swap(p,q);
// printf("\na10\n=%d",a[1][0]);
// printf("a[%d][%d]=%da[%d][%d]=%d\n",s,b,*p,s,b+1,*q);

}
}

}
printf("The result is:\n");
for (b=0;b {
printf("%4d",a[b]);
}
printf("\n\n");
// printf("\n\n%d",a[1][3]);
}
system("pause");
system("cls");
}个人编写,望采纳

回答4:

int a[10],i,j,k,temp;

选择法:
for(i=0;i<9;i++)
{ k=i;
for(j=k+1;j<10;j++)
if(a[k] temp=a[i];a[i]=a[k];a[k]=temp;
}

冒泡法:
for(i=0;i<9;i++)
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;
}

回答5:

冒泡法
#include
#include
#include
#include
int main(void)
{
int f[100],i,m,j,n,c,p,t;
for(t=0;t<100;t++)
f[t]=rand() % 1000;
for(j=1;j<100;j++)
{
c=0;
for(i=0;i<100-j;i++)
{
if(f[i]>f[i+1])
m=f[i],f[i]=f[i+1],f[i+1]=m,c++;
}
if(c==0)
break;
}
for(n=0;n<100;n++)
{
printf("%-4d ",f[n]);
if((n+1)%10==0)
printf("\n");
}
return 0;
}