怎么样使用C或把对数组1,5,7,2,5,4,10进行冒泡排序
发布网友
发布时间:2024-04-02 02:59
我来回答
共3个回答
热心网友
时间:2024-10-01 15:49
也不知道你的基础如何,是简单的就想看个函数呢还是想问具体的冒泡排序的思想呢?
简单描述一下思想然后简单的举个例子吧:
思想:将第一个记录和第二个记录比较,若为逆序则对两个记录进行交换,然后比较第二个和第三个记录。以此类推,直到第n-1个记录和第n个记录进行比较为止。这样一次冒泡排序完成,最大(最小)的记录到最后一个位置上。然后从1开始到第n-2个也同样如上依次比较,这样依次直到依次找到次大(小)的值放到倒数第二个;三大(小)的值放到倒数第三个位置上,......直到最后一个为止;
循环结束条件即——某次排序过程中没有进行交换,即已经排好了。
举个简单的例子吧,函数相关的说明已经标注上了,希望对你有帮助!
#include <stdio.h>
void bubble_sort(int a[], int n){//其中a[]是用于排序的数组变量的首地址,也即数组名
int i = 0, j = 0, change = 0;//change用于记录当前次比较是否进行了交换
for(i = n - 1, change = 1; i >= 1 && change; i--){//如果change是0,即已经排好序不用再进行比较了
change = 0;//将当前次的change赋值为0,记录不交换即下次不用比较了
for(j = 1; j <= i; j++){//内循环依次将相邻的两个记录进行比较
if(a[j] > a[j+1]){//小的前移,最大的移动到本次的最后一项去
a[0] = a[j+1];
a[j+1] = a[j];
a[j] = a[0];
change = 1;//进行了交换的标记
}
}
}
}
void main(){
int a[8] = {0, 1, 5, 7, 2, 5, 4, 10};
int i = 0;
printf("排序前数据:\n\n");
for(i = 1; i <= 7; i++)
printf("%4d", a[i]);
printf("\n\n");
bubble_sort(a, 7);
printf("排序后数据:\n\n");
for(i = 1; i <= 7; i++)
printf("%4d", a[i]);
printf("\n\n");
}
热心网友
时间:2024-10-01 15:50
#include<stdio.h>
#include<string.h>
int main()
{
int s[20]={1,5,7,2,5,4,10};
int i,j,temp;
//for(i=0;i<7;i++)
// printf("%d\n",s[i]);
for(i=0;i<7;i++){
for(j=0;j<7-i-1;j++)
{
if( s[j] > s[j+1] )
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
printf("%d ",s[i]);
}
printf("\n");
}
热心网友
时间:2024-10-01 15:47
#include <stdio.h>
void bubble_sort(int array[],int n)
{
int i,j,flag,temp;
for(i = 0; i < n-1; i++)
{
flag = 1;
for(j = 0; j < n-i-1; j++)
{
if(array[j] > array[j+1])
{
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag = 0;
}
}
if(1 == flag)
break;
}
for(i = 0; i < n-1; i++)
printf("%d, ", array[i]);
printf("\n");
return;
}
void main()
{
int nNum[] = {1,5,7,2,5,4,10};
bubble_sort(nNum, sizeof(nNum)/sizeof(nNum[0]));
return;
}