c语言,求教用快速排序法,将十个数按大小顺序输出。

我们学了数组,循环,指针,求高手指点用这些东西怎么写。

给你个程序吧,按照从小到大排列的,答题不易,望采纳。不明白,请追问。#include "stdio.h"
#include "stdlib.h"
#include "math.h"
main()
{
int a[12];
int i,j,t;
printf("请输入10个数:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("排序前的数列为:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("%\n");

//排序
for(i=0;i<10;i++)
for(j=0;j<9-i;j++)
if(a[j]>a[j+1]) 
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
//结束排序

printf("排序后的数列为:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
printf("%\n");
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-06-11
#include <stdio.h>
#define MaxSize 100
typedef int KeyType; /*关键字类型*/
typedef char ElemType[10]; /*其他数据项类型*/
typedef struct
{
KeyType key; /*关键字域*/
ElemType data; /*其他数据域*/
} LineList; /*线性表元素类型*/
void QuickSort(LineList R[],int s,int t,int n) /*对R[s]至R[t]的元素进行快速排序*/
{
int i=s,j=t,k;
LineList tmp;
if (s<t) /*区间内至少存在一个元素的情况*/
{ R[0]=R[s]; /*用区间的第1个记录作为基准*/
while (i!=j) /*从区间两端交替向中间扫描,直至i=j为止*/
{ while (j>i && R[j].key>R[0].key)
j--; /*从右向左扫描,找第1个关键字小于tmp.key的R[j]*/
R[i]=R[j]; /*找到这样的R[j],则R[i]和R[j]交换*/
while (i<j && R[i].key<R[0].key)
i++; /*从左向右扫描,找第1个关键字大于tmp.key的R[i]*/
R[j]=R[i]; /*找到这样的R[i],则R[i]和R[j]交换*/

}
R[i]=R[0];
printf("第%2d个位置为枢轴:",i);
for (k=1;k<=n;k++)
printf("%3d",R[k].key);
printf("\n");

QuickSort(R,s,i-1,n); /*对左区间递归排序*/
QuickSort(R,i+1,t,n); /*对右区间递归排序*/

}
}
void main()
{
LineList R[MaxSize];
KeyType a[]={75,87,68,92,88,61,77,96,80,72};
int n=10,i;
for (i=0;i<n;i++)
R[i+1].key=a[i];
printf("排序前的原始次序:");
for (i=1;i<=n;i++)
printf("%3d",R[i].key);
printf("\n");
QuickSort(R,1,n,n);
}追问

我选错了- -sorry

追答

没关系,会了就好

本回答被网友采纳
第2个回答  2013-06-12
给你参考一下
#include<stdio.h>
int main()
{
int i, j, p, q, s, a[10];
printf(" input 10 numbers:\n");
for (i = 0; i < 10; i++)
scanf("%d", &a[i]);
for (i = 0; i < 10; i++)
{
p = i;
q = a[i];
for (j = i + 1; j < 10; j++)
if (q > a[j])
{
p = j;
q = a[j];
}
if (i != p)
{
s = a[i];
a[i] = a[p];
a[p] = s;
}
printf("%d\t", a[i]);
}
}本回答被提问者采纳
相似回答