c語言數組元素排序
㈠ c語言數組排序
這個不是排序,而是逆序輸出,沒學過鏈表用自動增長的棧來實現好了,
只要內存夠大,可以輸入任意個整數:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define INC_SIZE 5 /* 每次棧自動增長的大小 */
/* 棧結構 */
typedef struct INTEGER_STACK
{
int* value;
int size; /* 棧大小 */
int pos; /* 棧頂位置 */
} Stack;
/* 初始化棧 */
void initialize(Stack* s)
{
if (s->size <= 0)
s->size = INC_SIZE;
s->value = (int*)malloc(sizeof(int) * s->size); /* TODO: error check */
s->pos = -1;
}
/* 銷毀 */
void destroy(Stack* s)
{
free(s->value);
s->value = NULL;
s->size = 0;
}
/* 擴充棧 */
void expand(Stack* s, int new_size)
{
if (new_size > s->size)
{
s->value = (int*)realloc(s->value, sizeof(int) * new_size); /* TODO: error check */
s->size = new_size;
}
}
/* 入棧 */
void push(Stack* s, int i)
{
if (s->pos >= s->size - 1)
expand(s, s->size + INC_SIZE);
s->value[++(s->pos)] = i;
}
/* 出棧 */
int* pop(Stack* s)
{
if (s->pos >= 0)
return &(s->value[s->pos--]);
else
return NULL;
}
/* 是否為空棧 */
int is_empty(Stack* s)
{
return s->pos < 0;
}
/* 測試程序 */
int main()
{
Stack stack;
stack.size = 5;
initialize(&stack);
/* 輸入數組 */
printf("輸入整數數組,每行一個整數, 用 end 結束:\n");
while (1)
{
char buf[128];
scanf("%s", buf);
if (strcmp(buf, "end") == 0)
break;
else
push(&stack, atoi(buf));
}
printf("\n");
/* 逆序輸出 */
do
{
int* i = pop(&stack);
if (i == NULL)
break;
printf("%d", *i);
if (!is_empty(&stack))
printf(" ");
}
while (1);
destroy(&stack);
return 0;
}
㈡ c語言編程: 將一組數按從大到小的順序排序
#include <stdio.h>
main()
{
int x;
printf("請輸入要排序數字個數:");
scanf("%d",&x);
int i,j,k,a,b,num[x];
printf("輸入數據:");
for(i=0;i<x;i++)
scanf("%d",&num[i]);
for(j=0;j<x;j++)
{
for(k=j+1;k<x;k++)
if(num[k]>num[j])
{
a=num[j];
num[j]=num[k];
num[k]=a;
}
}
for(b=0;b<x;b++)
printf("%d ",num[b]);
return 0;
}
(2)c語言數組元素排序擴展閱讀:
include用法:
#include命令預處理命令的一種,預處理命令可以將別的源代碼內容插入到所指定的位置;可以標識出只有在特定條件下才會被編譯的某一段程序代碼;可以定義類似標識符功能的宏,在編譯時,預處理器會用別的文本取代該宏。
插入頭文件的內容
#include命令告訴預處理器將指定頭文件的內容插入到預處理器命令的相應位置。有兩種方式可以指定插入頭文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含標准庫頭文件或者實現版本所提供的頭文件,應該使用第一種格式。如下例所示:
#include<math.h>//一些數學函數的原型,以及相關的類型和宏
如果需要包含針對程序所開發的源文件,則應該使用第二種格式。
採用#include命令所插入的文件,通常文件擴展名是.h,文件包括函數原型、宏定義和類型定義。只要使用#include命令,這些定義就可被任何源文件使用。
㈢ 求C語言將數組元素大小排序!!
#include <stdio.h>
int main(){
int numbers[10] = { 10,2,3,4,5,6,9,8,7,1 };
int a,b, text, hello;
for(a=0; a<10-1; a=a+1) { //在這里進行比較的開始的代碼
hello = 1; //假如剩下的元素已經被排序好了,然後接著進行下面的比較
for(b=0; b<10-1-i; b=b+1){
if(numbers[b] > numbers[b+1]){
text= numbers[b];
numbers[b] = numbers[b+1];
numbers[b+1] = text;
hello= 0;
}
}
if(hello) break;
}
for(a=0; a<10; a=a+1){
printf("%d ", numbers[a]);
}
printf(" ");
return 0;
}
(3)c語言數組元素排序擴展閱讀:
C語言中數組元素大小的相關排序規則:
一、首先需要對數組中的元素進行排列,默認是以字元串的規則進行從小到大排序;可接收一個參數:自定義的規則相關排序。參數的具體要求如下:
1、參數首先必須是一個函數;
2、函數必須有一個明確的返回值;
3、返回值必須是number類型,但不可以是NaN。
二、排序中的具體規則:
1、首先每次從數組中挑選出兩個元素傳入函數中,進行比較,直到所有進行排列的元素都被挑選完畢以後就不要再進行挑選;
2、如果返回值是一個正數,就交換這彼此的位置,實現大小的正確排列;
3、如果返回值是一個負數或0,此時說明大小位置的順序是正確的,此時就不需要交換彼此的位置。
4、默認同一字元的全形字元看做半形字元。不區分同一個字元(如日文的片假字)的半形與全形狀態。相同元素,維持原序,默認區分字母大小寫,同一個字元小寫在前,大寫在後。
注意:對數組的元素進行排序需要不斷比較兩個數字的大小,10個元素排序一共需要比較9次,直到所有的元素被都完完全全地被比較一次。
㈣ 編寫C語言程序,把一個數組按從小到大的次序排列起來
源程序以及演算法注釋如下:
#define _CRT_SECURE_NO_WARNINGS//VS編譯環境需要進行宏定義,VC6.0可忽略
#include<stdio.h>//輸入輸出頭文件
int main()
{
int number[10], New_number[10];//定義數組的數據類型為整型
int i, j, m, n, k;//定義變數的數據類型為整型
printf("input 10 <int> number:");//文字提示
for (i = 0; i <= 9; i++)//用循環輸入數值給數組number並賦給數組New_number
{
scanf("%d", &number[i]);//輸入10個整形數字到數組中
New_number[i] = number[i];//數組number元素賦給數組New_number
}
for (n = 0; n <= 8; n++)//要進行(10-1)組比較
for (j = 0; j <= 8 - n; j++)//每組進行(10減第幾組)次比較
{
if (number[j] > number[j + 1])//比較大小並將小的賦給前面的數組
{
k = number[j];//將相對較大的元素賦值給中間元素
number[j] = number[j + 1];//將相對較小的元素送達前面一個位置
number[j + 1] = k;//將中間變數元素送給後面一個位置
}
if (New_number[j] < New_number[j + 1])//比較大小並將大的賦給前面的數組
{
k = New_number[j + 1];//將相對較小的元素賦值給中間元素
New_number[j + 1] = New_number[j];//將相對較大的元素送達前面一個位置
New_number[j] = k;//將中間變數元素送給後面一個位置
}
}
printf("min-->max:
");//文字提示
for (m = 0; m <= 9; m++)//依次從小到大輸出
printf("%d ", number[m]);//輸出元素
printf("
");
printf("max-->min:
");//文字提示
for (m = 0; m <= 9; m++)//依次從大到小輸出
printf("%d ", New_number[m]);//輸出元素
printf("
");
return 0;
}
程序運行結果如下:
(4)c語言數組元素排序擴展閱讀:
其他簡單實現程序:
#include<stdio.h>
int main()
{
int a[10]={0};
int i,j,temp;
for(i = 0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i = 0;i<10;i++)
{
for(j = 0;j<10-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<10;i++)
printf("%d ",a[i]);
return 0;
}
㈤ c語言數組的排序
可以採用冒泡排序的方法。以下給題主一個對既定數組進行升序、降序排序的代碼
#include<stdio.h>
#include<time.h>
#defineelemTypeint/*元素類型*/
#defineLEN100/*數組長度上限*/
#defineASC0/*升序*/
#defineDESC1/*降序*/
/*冒泡排序*/
/*參數說明:*/
/*elemTypearr[]:排序目標數組*/
/*intlen:元素個數*/
/*intorder:排序方式;升序(由小到大):ASC;降序(由大到小):DESC*/
voidbubbleSort(elemTypearr[],intlen,intorder){
inti,j,temp;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++){
if(order==ASC){/*升序*/
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
elseif(order==DESC){/*降序*/
if(arr[j]<arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
/*列印數組*/
voidprintArr(elemTypearr[],intlen){
inti;
for(i=0;i<len;i++)
printf("%d ",arr[i]);
putchar(' ');
}
intmain(void){
elemTypearr[LEN]={3,5,1,7,2,9,6,8,10,4};
intlen;
len=10;
puts("初始數組:");
printArr(arr,len);
putchar(' ');
puts("升序排列:");
bubbleSort(arr,len,ASC);/*升序冒泡排序*/
printArr(arr,len);
putchar(' ');
puts("降序排列:");
bubbleSort(arr,len,DESC);/*降序冒泡排序*/
printArr(arr,len);
putchar(' ');
getch();/*屏幕暫留*/
return0;
}
運行結果
㈥ C語言怎樣對二維數組中每個元素進行選擇排序
#include<stdio.h>
#include"stdlib.h"
#include"time.h"
intmain(intargc,char*argv[]){
inta[5][8],i,j,k,t,*p;
printf("排序前: ");
srand((unsigned)time(NULL));
for(i=0;i<5;i++){//為二維數組賦值
for(j=0;j<8;printf("%3d",a[i][j++]=rand()%100));
printf(" ");
}
printf("排序後: ");
p=(int*)a;//降為一維,這樣排序簡單
for(t=i=0;i<40;i++){//選擇法排序
for(k=i,j=k+1;j<40;j++)
if(p[k]>p[j])
k=j;
if(k!=i)
j=p[k],p[k]=p[i],p[i]=j;
printf(++t%8?"%3d":"%3d ",p[i]);
}
return0;
}
㈦ c語言如何將一個數組中的數值排好順序
使用冒泡排序法進行編程:
解釋:
1.第一個for循環:利用數組循環輸入4個變數。
2.第二個for循環:該循環的意思是如果a[0]>a[1]的話,兩個變數的值交換,利用循環依次比較。要注意的是i<3,因為其中有i+1,i最大取到2,也就是i+1最大取到3才正確。
3.第三個for循環:利用循環依次輸出排序後的數組,每輸出一個加一個空格以便於區分。
(7)c語言數組元素排序擴展閱讀:
冒泡排序法,從數組頭部開始,不斷比較相鄰的兩廳笑個元素的大小,通過交換兩個元素的值使較大的元素逐漸銀物往後移動,扮搏含直到數組的末尾。
經過第一輪的比較,就可以找到最大的元素,並將它移動到最後一個位置。第一輪結束後,繼續第二輪。仍然從數組頭部開始比較,讓較大的元素逐漸往後移動,直到數組的倒數第二個元素為止。
經過第二輪的比較,就可以找到次大的元素,並將它放到倒數第二個位置。
以此類推,進行 n-1(n 為數組長度)輪「冒泡」後,就可以將所有的元素都排列好。
㈧ C語言怎樣給一個數組中的數從大到小排序
#include "stdio.h"
int main()
{
int i,j;
int a[12];
for(i=1; i<=10; ++i)
scanf("%d",&a[i]);
for(i=1; i<10; ++i)
for(j=i; j<=10; ++j)
if(a[i]<a[j])
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
//前十個數的銀伏排序
for(i=1; i<=10; ++i)
printf("%d ",a[i]);
printf("\n");
printf("Input a new number: ");
scanf("%d",&a[11]);
for(i=10; i>0; --i)
if(a[i+1]>手搏缺a[i])
{
int t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
else break;
//11個數的排序
for(i=1;i<=11; ++i)
printf("%d "畢辯,a[i]);
printf("\n");
return 0;
}
㈨ C語言:用選擇排序法對一個數組里的數進行排序,從小到大,要求選出小的進行排序
#include<stdio.h>
intmain()
{
inti=0;
inta[10]={0,5,2,3,6,9,8,7,4,1};
intj=0;
inttmp=0;
intm=sizeof(a)/sizeof(a[0]);//s數組大小
for(i=0;i<m-1;i++)//比較m-1次
{
for(j=0;j<m-i-1;j++)//最後一次比較a[m-i-1]與a[m-i-2]
{
if(a[j]>a[j+1])//如果a[j]比a[j+1]大則交換內容
{
tmp=a[j+1];
a[j+1]=a[j];
a[j]=tmp;
}
}
}
for(i=0;i<m;i++)
{
printf("%d",a[i]);//列印
}
printf(" ");
return0;
}
(9)c語言數組元素排序擴展閱讀
C語言排序法
把一個數組進行排序可以使用選擇排序法。選擇排序法的原理在是每一趟循環尋找數組中最小的數的下標,然後按照遞增的順序放入數組中。
循環找出最小數的下標,該下標用min保存,直到比較完整個數組,即可找到最小的數,然後將該數放入數組的第一位,這樣就排好了一個元素。
需要再嵌套一層外層循環即可排好所有元素。第二次循環就不用再比較第一個元素了,因為第一個元素已經排好,依次類推,每一次循環就會排好一個,進行n-1次循環即可排好所有元素。
㈩ 用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的隨機數,然後交換。
(10)c語言數組元素排序擴展閱讀
C語言排序法
在一層循環找出最小數的下標,該下標用min保存,直到比較完整個數組,即可找到最小的數,然後將該數放入數組的第一位。
這樣只能排好一個元素,於是需要再嵌套一層外層循環即可排好所有元素。第二次循環就不用再比較第一個元素了,因為廳穗第一啟悉個元素已經排好,依次類推,每一次循環就會排好一個,進行n-1次循環即可排好所有元素。