『壹』 c語言編程:逆序排列
#include <stdio.h>
int main()
{
int t, n, i = 0, a[20];
while (scanf("%d", &a[i]) != EOF && a[i] != 0) i++;
n = i - 1;
for (i = 0; i <= n / 2; i++)
{
t = a[i];
a[i] = a[n - i];
a[n - i] = t;
}
for (i = 0; i < n; i++)
printf("%d ", a[i]);
printf("%d\n", a[i]);
return 0 ;
『貳』 C語言關於逆向排序
重要的是思想,不是代碼.
原來:1
2
3
4
5
第一:5
2
3
4
1
//
第一個和最後一個交換
第二:5
4
3
2
1
//
第二個和倒數第二個交換
上面2次就交換完畢,
因為交換1次,
是2個數據的位置變動了,
奇數的時候中間的數不用動.
所以是
n/2.
若繼續交換
則
反反得正,又換回來了...
『叄』 用C語言編程:將一個數組逆序輸出
1、首先打開軟體VC++6.0軟體,准備一個空白的C語言文件,引入頭文件並寫好主函數:
『肆』 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語言怎樣寫下面的程序 1:將一個數組中的值按逆順序存放如願來的順序為86541要求改為14568
void swith(int arr[],int num)
{ int j,k;
for(j=0;j<num;j++,num--)//循環,交換值
{ k=arr[num-1];
arr[num-1]=arr[j];
arr[j]=k;
}
}
void main()
{int a[5]={8,6,5,4,1};
int b[10];
int i=0;
for(i=0;i<10,i++)
scanf("%d",a[i]);//自已定義數組的值,個數為10;
swith(a,5);//調用
swith(b,10);//調用
for(i=0;i<5;i++)
printf("%d\t",a[i]);//輸出
printf("\n");
for(i=0;i<10;i++)
printf("%d\t",b[i]);//輸出
printf("\n");
}
『陸』 C語言 選擇法排逆序 問題
因為每次排序開始的時候,你沒有給pm賦初值,那麼前一次比較中,pm指向哪裡,後來還會指向哪裡,而且你的程序每次一定會發生交換,那如果第二次本來順序是對的,交換之後就會把順序打亂。看圖,就是剛剛講的過程。
解決辦法:
1.每次給pm賦個初值,就指向當前的a[i]
2.給交換的那部分函數加一個判斷條件,比如
if pm!=&a[i],再開始交換。
『柒』 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語言程序設計 倒序排序的程序
#include<stdio.h>
intmain()
{
intarr[10];//定義十個元素的數組
for(inti=0;i<10;i++)
scanf("%d",&arr[i]);//循環給元素賦值
for(inti1=0;i1<10;i1++)
{
for(inti2=0;i2<10-i1-1;i2++)
{
if(arr[i2]<arr[i2+1])
{
inttemp=arr[i2];
arr[i2]=arr[i2+1];
arr[i2+1]=temp;
}
}
}
for(intj=0;j<10;j++)
printf("%d ",arr[j]);//輸出
return0;
}
『玖』 用C語言編程將一個數組的元素值按逆序重新排放。
#include <stdio.h>
#define N 10
void main()
{
int a[N],i,temp;
printf("請輸入%d個整數:\n",N);
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("輸入的數字是:\n");
for(i=0;i<N;i++)
printf("%3d",a[i]);
printf("\n");
for(i=0;i<N/2;i++)
{
temp=a[i];
a[i]=a[N-1-i];
a[N-1-i]=temp;
}
printf("重新排序後的數組是:\n");
for(i=0;i<N;i++)
printf("%3d",a[i]);
printf("\n");
}
『拾』 如何用C語言實現字元串逆序排列
樓主你好
具體代碼如下:
#include<stdio.h>
#include<string.h>
int
main()
{
char
*p;
char
c[20];
printf("Enter
a
string:");
scanf("%s",c);
p=c+strlen(c)-1;
while(p>=c)
printf("%c",*(p--));
printf("\n");
}
希望能幫助你哈