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);
}