c语言的排序
A. c语言的两种排序
1、选择排序法
要求输入10个整数,从大到小排序输出
输入:2 0 3 -4 8 9 5 1 7 6
输出:9 8 7 6 5 3 2 1 0 -4
代码:
#include<stdio.h>
int main(int argc,const char*argv[]){
int num[10],i,j,k,l,temp;
//用一个数组保存输入的数据
for(i=0;i<=9;i++)
{
scanf("%d",&num<i>);
}
//用两个for嵌套循环来进行数据大小比较进行排序
for(j=0;j<9;j++)
{
for(k=j+1;k<=9;k++)
{
if(num[j]<num[k])//num[j]<num[k]
{
temp=num[j];
num[j]=num[k];
num[k]=temp;
}
}
}
//用一个for循环来输出数组中排序好的数据
for(l=0;l<=9;l++)
{
printf("%d",num[l]);
}
return 0;
}
2、冒泡排序法
要求输入10个整数,从大到小排序输出
输入:2 0 3-4 8 9 5 1 7 6
输出:9 8 7 6 5 3 2 1 0-4
代码:
#include<stdio.h>
int main(int argc,const char*argv[]){
//用一个数组来存数据
int num[10],i,j,k,l,temp;
//用for来把数据一个一个读取进来
for(i=0;i<=9;i++)
{
scanf("%d",&num<i>);
}
//用两次层for循环来比较数据,进行冒泡
for(j=0;j<9;j++)
{
for(k=0;k<9-j;k++)
{
if(num[k]<num[k+1])//num[k]<num[k+1]
{
temp=num[k];
num[k]=num[k+1];
num[k+1]=temp;
}
}
}
//用一个for循环来输出数组中排序好的数据
for(l=0;l<=9;l++)
{
printf("%d",num[l]);
}
return 0;
}
(1)c语言的排序扩展阅读:
return 0代表程序正常退出。return是C++预定义的语句,它提供了终止函数执行的一种方式。当return语句提供了一个值时,这个值就成为函数的返回值。
return语句用来结束循环,或返回一个函数的值。
1、return 0,说明程序正常退出,返回到主程序继续往下执行。
2、return 1,说明程序异常退出,返回主调函数来处理,继续往下执行。return 0或return 1对程序执行的顺序没有影响,只是大家习惯于使用return(0)退出子程序而已。
B. 用c语言排序的方法
main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b){t=a,a=b,b=t}
if(a>c) {t=a,a=c,c=t)}
if(b>c) {t=b,b=c,c=t)}
printf("%d %d %d",a,b,c);
getch();
}
C. C语言【排序】
这个较简单。
参考如下:
#include "stdio.h"
#include "conio.h"
#define NumLen 1024
void main()
{
FILE *fp_in,*fp_out;
char s[100];
int N[NumLen],b;
int i=0,j,k;
if((fp_in=fopen("d:\\a1.txt","r"))==NULL)
{
printf("Open File Err.");
return ;
}
while(!feof(fp_in) && i<NumLen)
{
if(fscanf(fp_in,"%d",N+i++)==0)
break;
}
fclose(fp_in);
for(j=0;j<i;j++)
for(k=j+1;k<i;k++)
if(N[j]>N[k])
{
b =N[j];N[j]=N[k];N[k]=b;
}
printf("Count:%d\n",i);
if((fp_out=fopen("d:\\a2.txt","w"))==NULL)
{
printf("Open File Err.");
return ;
}
for(j=0;j<i;j++)
{
printf("%d ",N[j]);
fprintf(fp_out,"%d ",N[j]);
}
printf("\nOK.");
fclose(fp_out);
getch();
}
D. c语言排序的方法
排序主要分为以下几种。
1.冒泡排序:通过循环比较前后数的大小进行交换。最后使得数组有序。
2.快速排序:首先将第一个数作为一个基准,然后循环,将前半部分大于该数的与后半部分小于该数的进行交换,使得以该数为分界线,前面的小于该数,后面的大于该数,然后分前后两部分继续。
E. C语言中的排序法
c语言中排序法有选择法和冒泡法是最常见的。
1冒泡法对10个数排序
#include<stdio.h>
void
main
()
{
int
a[10];
int
i,j,t;
printf("please
input
10
numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++)
//进行9次循环,实现9次比较
for(i=0;i<9-j;j++)
//在每一次比较中在进行9-j次比较
if(a[i]>a[i+1])
//相邻两数比较大的下沉即交换
{t=a[i+1];
a[i+1]=a[i];
a[i]=t;
}
printf("the
sorted
numbers
:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}
不管有多少数只要改变一下都可以实现功能。定义一个大的数组,用多次循环就可以实现。
2选择法对10个数排序
此法没有冒泡法方便不在叙述
。
F. C语言排序
(1)交换类排序法交换类排序法是指借助数据元素之间的互相交换进行排序的一种方法。冒泡排序法与快速排序法都属于交换类排序方法。冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据元素的交换逐步将线性表变成有序。假设线性表的长度为n,则在最坏情况下,冒泡排序需要经过n/2遍的从前往后的扫描和n/2遍的从后往前的扫描,需要的比较次数为n(n–1)/2。但这个工作量不是必需的,一般情况下要小于这个工作量。快速排序法也是一种交换类的排序方法,但由于它比冒泡排序法的速度快,因此称之为快速排序法。其关键是对线性表进行分割,以及对各分割出的子表再进行分割。(2)插入类排序法插入类排序法主要有简单插入排序法和希尔排序法。简单插入排序法,是指将无序序列中的各元素依次插入到已经有序的线性表中。在这种排序方法中,每一次比较后最多移掉一个逆序,因此,这种排序方法的效率与冒泡排序法相同。在最坏情况下,简单插入排序需要n(n–1)/2次比较。希尔排序法对简单插入排序做了较大的改进。它是将整个无序序列分割成若干小的子序列分别进行插入排序。希尔排序的效率与所选取的增量序列有关。在最坏情况下,希尔排序所需要的比较次数为O(n1.5)。(3)选择类排序选择类排序主要有简单选择类排序法和堆排序法。简单选择排序法的基本思想是:扫描整个线性表,从中选出最小的元素,将它交换到表的最前面(这是它应有的位置);然后对剩下的子表采用同样的方法,直到子表空为止。对于长度为n的线性表,在最坏情况下需要比较n(n–1)/2次。堆排序法也属于选择类排序法。具有n个元素的序列(h1, h2, …, hn),当且仅当满足条件: 或 (i=1, 2, …, n/2)时称之为堆。可见,堆顶元素(即第一个元素)必为最大项。堆排序的方法对于规模较小的线性表并不适合,但对于较大规模的线性表来说是很有效的。
G. c语言排序
你刚问过的吧, 是起泡法排序
#include<stdio.h>
void main()
{
int i,j;
int array[10]={32,87,3,589,12,1076,2000,8,622,127};
int temp;
for(i=0;i<10;i++)
//应改为 for(i=0;i<9;i++)
//10个数,共大排9次
{
for(j=1;j<10-(i-1);j++)
//应改为for(j=0;j<9-i;j++)
//每大排 比较 9-i 次, 且对应数组下标
{
if(array[j]>array[j+1])
{
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
for(i=0;i<10;i++)
{
printf("%d ",array[i]);
}
printf("\n");
}
H. c语言的排序方法有哪些
排序方法其实是数学的计算方法,包括冒泡排序,选择排序,快速排序等等,计算机语言都能实现这些排序,c语言只是一种实现方式。
I. c语言简单排序
//希望我的回答对你的学习有帮助
//第一题
#include<stdio.h>
voidmain()
{
inti,j,t1,t2;
inta[10],b[10];
for(i=0,j=1;i<10;i++,j++)
{
scanf("%d",&a[i]);
b[i]=j;
}
for(intk=0;k<10;k++)
for(intl=k+1;l<=9;l++)
{
if(a[k]>a[l])
{
t1=a[l];a[l]=a[k];a[k]=t1;
t2=b[l];b[l]=b[k];b[k]=t2;
}
}
for(i=0;i<10;i++)
{
printf("%d",a[i]);
if(i<9)
printf("");
}
printf(" ");
for(i=0;i<10;i++)
{
printf("%d",b[i]);
if(i<9)printf("");
}
printf(" ");
}
J. C语言的排序
1.用数组及指针实现
#include <stdio.h>
void main()
{
int i,k,m,n,num[50],*p;
printf("input number of person: n=");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)//以1至n为序给每个人编号
*(p+i)=i+1;
i=0; //i为每次循环时计数变量
k=0; //k为按1,2,3报数时的计数变量
m=0; //m为退出的人数
while(m<n-1) //当退出人数比n-1少时(即未退出人数大于1时)执行循环体
{
if(*(p+i)!=0)k++;
if(k==3) //对退出的人的编号置为0
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n)i=0; //报数到最后,i恢复为0
}
while(*p==0)p++;
printf("The last one is No.%d\n",*p);
}
2.用单向循环链表实现
#include "stdio.h"
#include "malloc.h"
#include "stdlib.h"
#define NULL 0
struct List
{
int data;
struct List *next;
}List;
struct List * InitList(int n)
{//以head为头结点,建立n个节点的单向循环链表,并赋值1-n;返回head指针
struct List *head,*p,*q;
head=(struct List *)malloc(sizeof(struct List));
head->next=head;
head->data=1;
p=head;
int i;
for(i=2;i<=n;i++)
{
q=(struct List *)malloc(sizeof(struct List));
q->data=i;
p->next=q;
q->next=head;
p=p->next;
}
return head;
}
int GetList(struct List *head)
{//从1开始(即head节点)数,
//凡是遇到对3求余为2的节点即删除它的下一个节点(即被3整的节点),
//变量i+1,循环操作直至只剩下一个节点,返回该节点的编号数
struct List *p,*q;
int i;
for(p=head,i=1;p->next!=p;i++,p=p->next)
if(i%3==2)
{
q=p->next;//以q标记3倍数节点的位置
p->next=p->next->next;//删除节点
free(q);//释放被删除的节点内存
i++;//补回删除节点的一次自增
}
return p->data;
}
void main()
{
struct List * head;
int n,num;
do
{
system("cls");//清屏
printf("\ninput the n:");
scanf("%d",&n);//输入n
if(n>0)head=InitList(n);//如果n>0则建立循环链表
else exit(NULL);//否则退出程序
num=GetList(head);//进行逢3剔除操作,并将返回值赋给num
printf("\n\nthe last one is %d\n\n\n",num);//显示最后剩下的节点编号
system("pause");//暂停屏幕
}while(1);
}