『壹』 c語言對一維數組排序
#include <stdio.h>
int main()
{
int i,j,t,a[11]; //定義變數及數組為基本整型
printf("請輸入10個數:\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]); //從鍵盤中輸入10個數
for(i=1;i<10;i++) //變數i代表比較的趟數
for(j=1;j<10-i;j++) //變最j代表每趟兩兩比較的次數
if(a[j]>a[j+1])
{
t=a[j]; //利用中間變數實現兩值互換
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序後的順序是:\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]); //將冒泡排序後的順序輸出
printf("\n");
return 0;
}
『貳』 設計C語言程序,用一維數組輸入N個整數,將這n個整數按從大到小排列
給你看看C語言的三種排序方法吧,這是我們老師給總結的,你看懂後就自己在寫這個程序吧!
一、冒泡法(起泡法)
演算法要求:用起泡法對10個整數按升序排序。
演算法分析:如果有n個數,則要進行n-1趟比較。在第1趟比較中要進行n-1次相鄰元素的兩兩比較,在第j趟比較中要進行n-j次兩兩比較。比較的順序從前往後,經過一趟比較後,將最值沉底(換到最後一個元素位置),最大值沉底為升序,最小值沉底為降序。
演算法源代碼:
# include <stdio.h>
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
/*輸入源數據*/
for(i=0;i<10;i++)
scanf("%d",&a[i]);
/*排序*/
for(j=0;j<9;j++) /*外循環控制排序趟數,n個數排n-1趟*/
for(i=0;i<9-j;i++) /*內循環每趟比較的次數,第j趟比較n-j次*/
if(a[i]>a[i+1]) /*相鄰元素比較,逆序則交換*/
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
/*輸出排序結果*/
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
演算法特點:相鄰元素兩兩比較,每趟將最值沉底即可確定一個數在結果的位置,確定元素位置的順序是從後往前,其餘元素可能作相對位置的調整。可以進行升序或降序排序。
二、選擇法
演算法要求:用選擇法對10個整數按降序排序。
演算法分析:每趟選出一個最值和無序序列的第一個數交換,n個數共選n-1趟。第i趟假設i為最值下標,然後將最值和i+1至最後一個數比較,找出最值的下標,若最值下標不為初設值,則將最值元素和下標為i的元素交換。
演算法源代碼:
# include <stdio.h>
main()
{
int a[10],i,j,k,t,n=10;
printf("Please input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<n-1;i++) /*外循環控制趟數,n個數選n-1趟*/
{
k=i; /*假設當前趟的第一個數為最值,記在k中 */
for(j=i+1;j<n;j++) /*從下一個數到最後一個數之間找最值*/
if(a[k]<a[j]) /*若其後有比最值更大的*/
k=j; /*則將其下標記在k中*/
if(k!=i) /*若k不為最初的i值,說明在其後找到比其更大的數*/
{ t=a[k]; a[k]=a[i]; a[i]=t; } /*則交換最值和當前序列的第一個數*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
演算法特點:每趟是選出一個最值確定其在結果序列中的位置,確定元素的位置是從前往後,而每趟最多進行一次交換,其餘元素的相對位置不變。可進行降序排序或升序排序。
三、插入法
演算法要求:用插入排序法對10個整數進行降序排序。
演算法分析:將序列分為有序序列和無序列,依次從無序序列中取出元素值插入到有序序列的合適位置。初始是有序序列中只有第一個數,其餘n-1個數組成無序序列,則n個數需進n-1次插入。尋找在有序序列中插入位置可以從有序序列的最後一個數往前找,在未找到插入點之前可以同時向後移動元素,為插入元素准備空間。
演算法源代碼:
# include <stdio.h>
main()
{
int a[10],i,j,t;
printf("Please input 10 numbers: ");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++) /*外循環控制趟數,n個數從第2個數開始到最後共進行n-1次插入*/
{
t=a[i]; /*將待插入數暫存於變數t中*/
for( j=i-1 ; j>=0 && t>a[j] ; j-- ) /*在有序序列(下標0 ~ i-1)中尋找插入位置*/
a[j+1]=a[j]; /*若未找到插入位置,則當前元素後移一個位置*/
a[j+1]=t; /*找到插入位置,完成插入*/
}
printf("The sorted numbers: ");
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
演算法特點:每趟從無序序列中取出第一個數插入到有序序列的合適位置,元素的最終位置在最後一趟插入後才能確定位置。也可是先用循環查找插入位置(可從前往後或從後往前),再將插入位置之後的元素(有序列中)逐個後移一個位置,最後完成插入。該演算法的特點是在尋找插入位置的同時完成元素的移動。因為元素的移動必須從後往前,則可將兩個操作結合在一起完成,提高演算法效率。仍可進行升序或降序排序。
這應該會對你很有用的,好好學,把它弄懂!祝你好運!
『叄』 C語言題:輸入十個數用一維數組分別用冒泡法與選擇排序法進行排序
#include<stdio.h>
#include<conio.h>
#defineARR_LEN255/*數組長度上限*/
#defineelemTypeint/*元素類型*/
/*冒泡排序*/
/*1.從當前元素起,向後依次比較每一對相鄰元素,若逆序則交換*/
/*2.對所有元素均重復以上步驟,直至最後一個元素*/
/*elemTypearr[]:排序目標數組;intlen:元素個數*/
voidbubbleSort(elemTypearr[],intlen){
elemTypetemp;
inti,j;
for(i=0;i<len-1;i++)/*外循環為排序趟數,len個數進行len-1趟*/
for(j=0;j<len-1-i;j++){/*內循環為每趟比較的次數,第i趟比較len-i次*/
if(arr[j]>arr[j+1]){/*相鄰元素比較,若逆序則交換(升序為左大於右,逆序反之)*/
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
/*選擇排序*/
/*1.將初始數組分為兩段,前段為已排序數組,後段為未排序數組*/
/*2.在未排序數組中尋找最值元素,將其然後放到已排序數組的末尾*/
/*3.對所有元素均重復以上步驟,直至最後一個元素*/
/*elemTypearr[]:排序目標數組;intlen:元素個數*/
voidselectionSort(elemTypearr[],intlen){
elemTypetemp;
inti,j,k;
for(i=0;i<len-1;i++){/*外循為排序趟數,len個數進行len-1趟*/
k=i;/*假設當前趟的第一個數為最小值,其下標記在k中(升序為尋找最小值,逆序反之)*/
for(j=i+1;j<len;j++)/*從下一個數到最後一個數之間依次判斷*/
if(arr[j]<arr[k])/*若k之後有更小的元素*/
k=j;/*則將其下標記更新至k中*/
if(k!=i){/*若k不為最初的i值,說明在其後找到比其更小的元素*/
temp=arr[k];
arr[k]=arr[i];
arr[i]=temp;
}/*則交換最小值和當前數組第一個元素*/
}
}
/*列印數組*/
/*elemTypearr[]:列印目標數組;intlen:元素個數*/
voidprintArray(elemTypearr[],intlen){
inti;
for(i=0;i<len;i++)
printf("%d ",arr[i]);
putchar(' ');
}
intmain(void){
elemTypearr1[ARR_LEN]={3,5,1,-7,4,9,-6,8,10,4};
elemTypearr2[ARR_LEN]={3,5,1,-7,4,9,-6,8,10,4};
intlen=10;
printf("原始數組1: ");
printArray(arr1,len);
putchar(' ');
printf("冒泡排序: ");
bubbleSort(arr1,len);
printArray(arr1,len);
putchar(' ');
printf("原始數組2: ");
printArray(arr2,len);
putchar(' ');
printf("選擇排序: ");
selectionSort(arr2,len);
printArray(arr2,len);
getch();/*屏幕暫留*/
return0;
}
『肆』 用C語言如何將一個一維數組中的元素隨機排序
#include
#include
#include
intmain()
{
inti,j,n,k,t,a[100];
srand((unsigned)time(NULL));
<p
利用rand()函數產生隨機數字,rand()%n產生小於n的隨機數,然後交換。
運行的結果:
#include
#include
intmain()
{
int&nbs
利用rand()函數產生隨機數字,rand()%n產生小於n的隨機數,然後交換。
(4)一維數組的排序c語言擴展閱讀
C語言排序法
在一層循環找出最小數的下標,該下標用min保存,直到比較完整個數組,即可找到最小的數,然後將該數放入數組的第一位。
這樣只能排好一個元素,於是需要再嵌套一層外層循環即可排好所有元素。第二次循環就不用再比較第一個元素了,因為第一個元素已經排好,依次類推,每一次循環就會排好一個,進行n-1次循環即可排好所有元素。
『伍』 用C語言對一維數組排序,並輸出原來的位置
可以先用冒泡排序對數組進行排序,然後對排序的數組進行遍歷,找出其在排序之前數組中的位置,參考代碼如下:
#include<stdio.h>
#include<string.h>
#defineN5
intmain()
{
inta[N],b[N],c[N],i,j,temp;
for(i=0;i<N;i++){//輸入數組,並用b保存數組a的值
scanf("%d",&a[i]);
b[i]=a[i];
}
for(i=0;i<N-1;i++)//對a從大到小冒泡排序
for(j=0;j<N-i-1;j++)
if(a[j]<a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
for(i=0;i<N;i++)//輸出排序後的a
printf("%d",a[i]);
printf(" ");
for(i=0;i<N;i++)//遍歷找出以前的位置
for(j=0;j<N;j++){
if(a[i]==b[j])
c[i]=j;
}
for(i=0;i<N;i++)//輸出位置數組
printf("%d",c[i]+1);
printf(" ");
return0;
}
/*
運行結果:
38476
87643
24531
*/
『陸』 c語言中,用一維數組排序十個整數,怎麼做
需要准備的材料分別有:電腦、C語言編譯器。
1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。