當前位置:首頁 » 編程語言 » c語言數組倒排列
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言數組倒排列

發布時間: 2022-04-25 05:20:42

c語言 數組 逆序排列

你要是用兩個數組,直接循環變數 i 從9倒數,
j=0;
for (i =9;i>=0;i--)
{
b[j] =a[i];
j++;
}

輸出數組b

㈡ C語言或C++實現數組 倒序排列。如「s023 s056 s078 s089」處理後為「s089 s078 s056 s023」請給出程序。

#include <stdio.h>
#include <string.h>

/*
* 反轉字元串
*/
void reverse(char *str)
{
char *b, *e, t;

if (*str == NULL)
return;

b = str;
e = b + (strlen(b) - 1);

while (b < e) {
t = *b;
*b++ = *e;
*e-- = t;
}
}

/*
* 反轉句子中的所有單詞
* 支持前後置空格和多空格分隔
*/
void reverseSentence(char *sentence)
{
char *b, *e;

reverse(sentence);

b = e = sentence;

while (*e != NULL) {
if (*e == ' ') {
*e = 0;
reverse(b);
*e = ' ';
b = e + 1;
}
e++;
}

reverse(b);
}

int main(void)
{
char sentence[] = "s023 s056 s078 s089";

printf("Ori: %s\n", sentence);
reverseSentence(sentence);
printf("End: %s\n", sentence);
}

㈢ C語言題目:編寫一維數組輸出結果倒過來排列

#include<stdio.h>
main(){
int a[10],i=0;
while(i<10)scanf("%d",&a[i++]);
i--;
while(i>0)printf("%d\n",a[i--]);}

㈣ 用c語言實現數組倒置

#include <stdio.h>
void invert(int x[],int n);
void main()
{
int i,*p,a[10]={2,3,4,5,6,7,8,9,10,11};
printf("%s\n","元素倒置前:");
for(p=a;p<a+10;) printf("%d ",*(p)++);
printf("\n");
p=a;
invert(p,10);
printf("%s\n","元素倒置後:");
for(p=a;p<a+10;) printf("%d ",*(p)++);
printf("\n");
}
void invert(int x[],int n)
{
int temp,i,j,m=(n-1)/2;
for (i=0;i<=m;i++)
{
j=n-1-i;
temp=x[i];x[i]=x[j];x[j]=temp;
}
}

㈤ C語言編程用數組怎麼逆序排列。求解析

讀入一組整數(不超過20個),並把它們保存在一個整型數組中。當用戶輸入0時,表示輸入結束。然後程序將把這個數組中的值按逆序重新存放,並列印出來。例如:假設用戶輸入了一組數據:7 19 -5 6 2 0,那麼程序將會把前五個有效數據保存在一個數組中,即7 19 -5 6 2,然後把這個數組中的值按逆序重新存放,即變成了2 6 -5 19 7,然後把它們列印出來。
輸入格式:輸入只有一行,由若干個整數組成,中間用空格隔開,最末尾的整數為0。
輸出格式:輸出也只有一行,即逆序排列後的整數,中間用空格隔開,末尾沒有空格。

㈥ c語言編程,將一個數組中的值按逆序排列。望解答。謝謝。

#include"stdio.h"
intmain(intargc,char*argv[]){
inta[10]={1,2,3,4,5,6,7,8,9,0},i,j,k;
for(i=0,j=9;i<j;j--,i++)
k=a[i],a[i]=a[j],a[j]=k;
for(i=0;i<10;printf("%d",a[i++]));
printf(" ");
return0;
}

運行結果:

㈦ 怎麼用C語言編寫一個倒序排序的題

我理解倒序就是原本從大到小, 排成從小到大...(或者反過來)

這樣的話, 最簡單的方法, 編一個循環體:
int b[N];//假定數組a存放原數據, b存放倒序後的數據,N為數據個數
for(i=0,j=N;i<N&&j>=0;i++,j--)
{
b[j]=a[i];
}

如果要求不使用新數組的話,就交換兩頭元素的位置,比如12345, 15交換,24交換:
int t; //中間變數t
for(i=0;i<N/2;i++) //依然假設數組a存放原數據,N為數據個數
{
t=a[i];
a[i]=a[N-i-1];
a[N-i-1]=t;
}

㈧ C語言數組元素逆序排列怎麼做

首先闡述一下逆序對的概念。假設有一個數組為Array[0..n] 其中有元素a[i],a[j].如果 當i<j時,a[i]>a[j],那麼我們就稱(a[i],a[j])為一個逆序對。
那麼統計一個數組中的逆序對,有什麼作用呢。逆序對可以反映插入排序的效率問題,如果逆序對數量多,那麼插入排序的效率就低,反之亦然。

那麼如何快速的找到逆序對的數量,同時又能夠對數組進行排序,並且使得復雜度為O(n*logn)呢?這就可能是一個小問題

看到復雜度為n*logn 有一種親切感,應為我們可以知道歸並排序的時間復雜度為O(n*logn)。 同時歸並排序是通過遞歸的方法建立遞歸樹,利用最小的兩個元素進行對比然後逐層向上進行遞歸,然後對比兩個已經排好序的數組,得到最終完整的排好序的數組。

歸並排序分為了3步驟;

第一步 拆分

第二步進行 計算兩個同樣類型但是規模較小的數組

第三步 合並兩個已排好序的數組

因此從整個數組拆分過程中,我們將它不斷進行拆分,而拆分得到的兩個數組,又是和原數組目的和形式相同的(即都是要排序,同時如果不為最小還要進行以上3步)

這樣可以想到遞歸解決問題,每一層進行相同的3步,知道不能進行位置。那麼這個不能進行的判斷顯得格外重要。

那麼加入了逆序對後,如何考慮呢,實際上很簡單。以為從最下面的含兩個元素的數組,到上層含多個元素的數組都有前後之分,這正好與逆序對性質相符,只要我
們找出前面那一個數組中假設L[i] 大於 後面一個數組中某個元素R[j]
然後就知道前面那個數組在該元素L[i]之後的元素都應該是大於R[j]的。因為在歸並過程我們也進行了排序。

大概思路就是這樣,以下是代碼。

[cpp] view plain
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define Infinite_num 1000
int L[100];
int R[100];

int merge_sort(int Array[],int p,int q,int r)
{
int n1 = q-p+1;
int n2 = r-q;
for(int i=0;i<n1;i++)
{
L[i] = Array[p+i];
}
L[n1] = Infinite_num;
for(i=0;i<n2;i++)
{
R[i] = Array[q+i+1];
}
R[n2] = Infinite_num;
int inversions = 0;
int count = false;
int j=0;
i=0;
for(int k=p;k<=r;k++)
{
if(count==false &&(L[i]>R[j])&&(R[i]!=Infinite_num))
{
inversions = inversions+n1-i;
count = true;
}
if(L[i]<=R[j])
{
Array[k] = L[i];
i++;
}
else
{
Array[k] = R[j];
j++;
count = false;
}
}
return inversions;

}
int merge_inverse(int Array[],int p,int r)
{
int inversions = 0;
int q = -1;
if(p < r)
{
q = (p+r)/2;
inversions = inversions+merge_inverse(Array,p,q);
inversions = inversions+merge_inverse(Array,q+1,r);
inversions = inversions+merge_sort(Array,p,q,r);
}
return inversions;
}
int main(int argc, char* argv[])
{
int Array[] = {1,3,7,8,2,4,6,5};

int inverse_times = 0;

inverse_times = merge_inverse(Array,0,7);
printf("%d",inverse_times);
return 0;
}

㈨ C語言顛倒排序

(1)「冒泡法」 冒泡法大家都較熟悉。其原理為從a[0]開始,依次將其和後面的元素比較,若a[0]>a[i],則交換它們,一直比較到a[n]。同理對a[1],a[2],...a[n-1]處理,即完成排序。下面列出其代碼:void bubble(int *a,int n) /*定義兩個參數:數組首地址與數組大小*/ { int i,j,temp; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) /*注意循環的上下限*/ if(a[i]>a[j]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } 冒泡法原理簡單,但其缺點是交換次數多,效率低。 下面介紹一種源自冒泡法但更有效率的方法「選擇法」。 (2)「選擇法」 選擇法循環過程與冒泡法一致,它還定義了記號k=i,然後依次把a[k]同後面元素比較,若a[k]>a[j],則使k=j.最後看看k=i是否還成立,不成立則交換a[k],a[i],這樣就比冒泡法省下許多無用的交換,提高了效率。void choise(int *a,int n) { int i,j,k,temp; for(i=0;i<n-1;i++) { k=i; /*給記號賦值*/ for(j=i+1;j<n;j++) if(a[k]>a[j]) k=j; /*是k總是指向最小元素*/ if(i!=k) { /*當k!=i是才交換,否則a[i]即為最小*/ temp=a[i]; a[i]=a[k]; a[k]=temp; } } } 選擇法比冒泡法效率更高,但說到高效率,非「快速法」莫屬,現在就讓我們來了解它。 (3)「快速法」 快速法定義了三個參數,(數組首地址*a,要排序數組起始元素下標i,要排序數組結束元素下標j). 它首先選一個數組元素(一般為a[(i+j)/2],即中間元素)作為參照,把比它小的元素放到它的左邊,比它大的放在右邊。然後運用遞歸,在將它左,右兩個子數組排序,最後完成整個數組的排序。下面分析其代碼:void quick(int *a,int i,int j) { int m,n,temp; int k; m=i; n=j; k=a[(i+j)/2]; /*選取的參照*/ do { while(a[m]<k&&m<j) m++; /* 從左到右找比k大的元素*/ while(a[n]>k&&n>i) n--; /* 從右到左找比k小的元素*/ if(m<=n) { /*若找到且滿足條件,則交換*/ temp=a[m]; a[m]=a[n]; a[n]=temp; m++; n--; } }while(m<=n); if(m<j) quick(a,m,j); /*運用遞歸*/ if(n>i) quick(a,i,n); } (4)「插入法」 插入法是一種比較直觀的排序方法。它首先把數組頭兩個元素排好序,再依次把後面的元素插入適當的位置。把數組元素插完也就完成了排序。void insert(int *a,int n) { int i,j,temp; for(i=1;i<n;i++) { temp=a[i]; /*temp為要插入的元素*/ j=i-1; while(j>=0&&temp<a[j]) { /*從a[i-1]開始找比a[i]小的數,同時把數組元素向後移*/ a[j+1]=a[j]; j--; } a[j+1]=temp; /*插入*/ } } (5)「shell法」 shell法是一個叫 shell 的美國人與1969年發明的。它首先把相距k(k>=1)的那幾個元素排好序,再縮小k值(一般取其一半),再排序,直到k=1時完成排序。下面讓我們來分析其代碼:void shell(int *a,int n) { int i,j,k,x; k=n/2; /*間距值*/ while(k>=1) { for(i=k;i<n;i++) { x=a[i]; j=i-k; while(j>=0&&x<a[j]) { a[j+k]=a[j]; j-=k; } a[j+k]=x; } k/=2; /*縮小間距值*/ } } 上面我們已經對幾種排序法作了介紹,現在讓我們寫個主函數檢驗一下。 #include<stdio.h> /*別偷懶,下面的"..."代表函數體,自己加上去哦!*/ void bubble(int *a,int n) { ... } void choise(int *a,int n) { ... } void quick(int *a,int i,int j) { ... } void insert(int *a,int n) { ... } void shell(int *a,int n) { ... } /*為了列印方便,我們寫一個print吧。*/[code]void print(int *a,int n) { int i; for(i=0;i<n;i++) printf("%5d",a[i]); printf("\n"); } main() { /*為了公平,我們給每個函數定義一個相同數組*/ int a1[]={13,0,5,8,1,7,21,50,9,2}; int a2[]={13,0,5,8,1,7,21,50,9,2}; int a3[]={13,0,5,8,1,7,21,50,9,2}; int a4[]={13,0,5,8,1,7,21,50,9,2}; int a5[]={13,0,5,8,1,7,21,50,9,2}; printf("the original list:"); print(a1,10); printf("according to bubble:"); bubble(a1,10); print(a1,10); printf("according to choise:"); choise(a2,10); print(a2,10); printf("according to quick:"); quick(a3,0,9); print(a3,10); printf("according to insert:"); insert(a4,10); print(a4,10); printf("according to shell:"); shell(a5,10); print(a5,10); }

聲明:本答案來自網路網友「 鬍子蕭」 由於本人知識有限只對冒泡法進行了校核。不足之處還請見諒!!!!

㈩ c語言中將一組數組倒序排列的程序

#include<stdio.h>
#include<math.h>

intisResult(intn,intnumber)
{
intsum=0;
while(number>0)
{
sum+=pow(number%10,n);
number/=10;
}
returnsum;
}

intmain()
{
intn;
scanf("%d",&n);
inti=0;
for(i=pow(10,n-1);i<pow(10,n);i++)
{
if(isResult(n,i)==i)
{
printf("%d",i);
}
}
printf(" ");
return0;
}