给定一个有10个数的列表,应用冒泡排序算法,以升序输出列表。

给定一个有十个数的列表,应用冒泡排序算法,以升序列表。

#include"stdio.h"
#include"stdlib.h"
#include "string.h"
#define Max 100 //假设文件长度
typedef struct{ //定义记录类型
int key; //关键字项
}RecType;
typedef RecType SeqList[Max+1]; //SeqList为顺序表,表中第0个元素作为哨兵
int n; //顺序表实际的长度
//冒泡排序的基本思想:设想被排序的记录数组R[1‥n]垂直排序。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮"(交换),如此反复进行,直到最后任意两个气泡都是轻者在上,重者在下为止。
//==========冒泡排序=======
typedef enum{FALSE,TRUE} Boolean; //FALSE为0,TRUE为1
void BubbleSort(SeqList R) { //自下向上扫描对R做冒泡排序
int i,j; Boolean exchange; //交换标志
for(i=1;i<n;i++) { //最多做n-1趟排序
exchange=FALSE; //本趟排序开始前,交换标志应为假
for(j=n-1;j>=i;j--) //对当前无序区R[i‥n] 自下向上扫描
if(R[j+1].key<R[j].key){ //两两比较,满足条件交换记录
R[0]=R[j+1]; //R[0]不是哨兵,仅做暂存单元
R[j+1]=R[j];
R[j]=R[0];
exchange=TRUE; //发生了交换,故将交换标志置为真
}
if(! exchange) //本趟排序未发生交换,提前终止算法
return;
}// endfor(为循环)
}//==========输入顺序表========
void input_int(SeqList R)
{
int i;
printf("Please input num(int):");
scanf("%d",&n);
printf("Plase input %d integer:",n);
for(i=1;i<=n;i++)
scanf("%d",&R[i].key);
}
//==========输出顺序表========
void output_int(SeqList R)
{
int i;
for(i=1;i<=n;i++)
printf("%4d",R[i].key);
}
//==========主函数======
void main()
{
SeqList R;
input_int(R);
BubbleSort(R);
printf("BubbleSort reult:");
output_int(R);
printf("\n");
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-19
可以使用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。#include "stdio.h"
#include "conio.h"
#define N 10
main()
{
int i,j,min,tem,a[N];
printf("请输入数值:\n");
for(i=0;i<N;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
for(i=0;i<N-1;i++)
{
min=i;
for(j=i+1;j<N;j++)
if(a[min]>a[j])
min=j;
tem=a[i];
a[i]=a[min];
a[min]=tem;
}
printf("按升序排列如果如下: \n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
getch();
}本回答被网友采纳
第2个回答  2013-10-19
public class SortTest {
public static void main(String[] args) {
int temp =0;
int[] num ={12,2,4,13,53,512,153,532,532,54};
//用于排序
for(int i=0; i<num.length-1; i++){
for(int j=0; j<num.length-i-1; j++){
if(num[j]>num[j+1]){
temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
//循环输出
System.out.println("排序后为:");
for(int i = 0; i < num.length; i++){
System.out.println(num[i]);
}
}
}
相似回答