用C语言对一维数组排序,并输出已排好元素的原来位置 c语言 使用冒泡排序将一维数组A中的N个元素升序排列

\u7528C\u8bed\u8a00\u5bf9\u4e00\u7ef4\u6570\u7ec4\u6392\u5e8f,\u5e76\u8f93\u51fa\u539f\u6765\u7684\u4f4d\u7f6e

\u53ef\u4ee5\u5148\u7528\u5192\u6ce1\u6392\u5e8f\u5bf9\u6570\u7ec4\u8fdb\u884c\u6392\u5e8f\uff0c\u7136\u540e\u5bf9\u6392\u5e8f\u7684\u6570\u7ec4\u8fdb\u884c\u904d\u5386\uff0c\u627e\u51fa\u5176\u5728\u6392\u5e8f\u4e4b\u524d\u6570\u7ec4\u4e2d\u7684\u4f4d\u7f6e\uff0c\u53c2\u8003\u4ee3\u7801\u5982\u4e0b\uff1a
#include#include#define N 5int main(){ int a[N],b[N],c[N],i,j,temp; for(i=0;i<N;i++){//\u8f93\u5165\u6570\u7ec4\uff0c\u5e76\u7528b\u4fdd\u5b58\u6570\u7ec4a\u7684\u503c scanf("%d",&a[i]); b[i]=a[i]; } for(i=0;i<N-1;i++)//\u5bf9a\u4ece\u5927\u5230\u5c0f\u5192\u6ce1\u6392\u5e8f 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++)//\u8f93\u51fa\u6392\u5e8f\u540e\u7684a printf("%d ",a[i]); printf("\n"); for(i=0;i<N;i++)//\u904d\u5386\u627e\u51fa\u4ee5\u524d\u7684\u4f4d\u7f6e for(j=0;j<N;j++){ if(a[i]==b[j]) c[i]=j; } for(i=0;i<N;i++)//\u8f93\u51fa\u4f4d\u7f6e\u6570\u7ec4 printf("%d ",c[i]+1); printf("\n"); return 0;}

\u65b9\u6cd5\u548c\u8be6\u7ec6\u7684\u64cd\u4f5c\u6b65\u9aa4\u5982\u4e0b\uff1a
1\u3001\u7b2c\u4e00\u6b65\uff0c\u6253\u5f00C\u6587\u4ef6\uff0c\u5b9a\u4e49\u4e00\u7ec4\u5e8f\u5217\u548c\u8981\u6392\u5e8f\u7684\u5404\u79cd\u53d8\u91cf\uff0c\u7136\u540e\u5904\u7406\u6392\u5e8f\u903b\u8f91\uff0c\u5177\u4f53\u7684\u4ee3\u7801\u89c1\u4e0b\u56fe\uff0c\u8f6c\u5230\u4e0b\u9762\u7684\u6b65\u9aa4\u3002


2\u3001\u7b2c\u4e8c\u6b65\uff0c\u5b8c\u6210\u4e0a\u8ff0\u6b65\u9aa4\u540e\uff0c\u5192\u6ce1\u6392\u5e8f\u7684\u903b\u8f91\u662f\u4e00\u7ec4\u6570\u5b57\u4ece\u7b2c\u4e00\u4e2a\u503c\u5f00\u59cb\uff0c\u5982\u679c\u4e24\u4e2a\u76f8\u90bb\u6570\u5b57\u7684\u987a\u5e8f\u4e0e\u671f\u671b\u7684\u987a\u5e8f\u4e0d\u540c\uff0c\u5219\u4f1a\u4ea4\u6362\u4e24\u4e2a\u6570\u5b57\u7684\u4f4d\u7f6e\u3002 \u91cd\u590d\u6b64\u8fc7\u7a0b\uff0c\u76f4\u5230\u6700\u540e\u4e00\u4e2a\u6570\u5b57\u3002\u5982\u679c\u9700\u8981\u4ea4\u6362\uff0c\u5219\u6392\u5e8f\u5b8c\u6210\uff0c\u5b9e\u73b0\u7684\u4ee3\u7801\u89c1\u4e0b\u56fe\uff0c\u8f6c\u5230\u4e0b\u9762\u7684\u6b65\u9aa4\u3002




3\u3001\u7b2c\u4e09\u6b65\uff0c\u5b8c\u6210\u4e0a\u8ff0\u6b65\u9aa4\u540e\uff0c\u7f16\u8bd1\u5e76\u8fd0\u884c\u7a0b\u5e8f\uff0c\u5c31\u83b7\u5f97\u4e86\u60f3\u8981\u7684\u7ed3\u679c\u4e86\uff0c\u89c1\u4e0b\u56fe\u3002\u8fd9\u6837\uff0c\u5c31\u89e3\u51b3\u4e86\u8fd9\u4e2a\u95ee\u9898\u4e86\u3002


简单的思路:

定义一个指针数组,找到b数组中元素在a数组中的地址,并存储在指针数组对应位置。

之后将指针数组内的地址值依次取出来与a数组首地址相减,得到的就是原来的位置。

利用的原理:数组内地址是连续的!

#include <stdio.h>
int main()
{
    int a[5]={3, 8, 4, 7, 6}, b[5]={8, 7, 6, 4, 3},c[5],i,j,*p[5];
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            if(b[i]==a[j])
                p[i]=&a[j];
        }
    }

    for(i=0;i<5;i++)
        c[i]=p[i]-&a[0]+1;
    printf("原来的位置数组c[5]={%d,%d,%d,%d,%d}
",c[0],c[1],c[2],c[3],c[4]);
}


/*我举个简单例子,一个一维数组int a[5]={3, 8, 4, 7, 6}
按降序排列以后是int b[5]={8, 7, 6, 4, 3}
最大的元素8在原来的数组中是第二位,7是第四位,等等
得到一个表示原来位置的数组int c[5]={2, 4, 5, 3, 1}*/
#include<stdio.h>

void main()

int i,j,k=0;
int a[5]={3, 8, 4, 7, 6};
int b[5]={8, 7, 6, 4, 3};
int c[5] = {0};
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
if (b[i]==a[j])
{
c[k++] = j+1; //因为说的是第几位而不是下标 所以加1
break;

}
}
for (i=0;i<5;i++)
{
printf("%d ",c[i]);
}
}
2 4 5 3 1 Press any key to continue


方法1:比较笨的办法是先排好。再在里面找。看是原来的第几个。 (代码我就不写了。)
方法2:有一个很快的方法,就是用快速排序排,
如果你深入的了解了快排,那么这个就很简单了。而且效率很高。
我给你写代码。

  
  方法1:比较笨的办法是先排好。再在里面找。看是原来的第几个。
  方法2:有一个很快的方法,就是用快速排序排,
  #include "stdio.h"//
  void main(void){
  int a[6]={8,5,2,7,9,4},b[6],c[6],i,j,x;
  for(i=0;i<6;c[i]=1+i++)
  printf("%d ",b[i]=a[i]);
  printf("\n");
  for(i=0;i<6;i++){
  for(x=i,j=x+1;j<6;j++)
  if(b[x]<b[j]) x=j;
  if(x!=i){
  j=b[i];
  b[i]=b[x];
  b[x]=j;
  j=c[i];
  c[i]=c[x];
  c[x]=j;
  }
  }
  for(i=0;i<6;printf("%d ",b[i++]));
  printf("\n");
  for(i=0;i<6;printf("%d ",c[i++]));
  printf("\n");
  }

用选择法排序,优化过的选择法。

先挑出5个数中的最大值,并记录其下标,将该数与第一位的数字交换,并将该下标存入c数组。然后挑出剩下n-1个数的最大值,记录下标存入c,并与第二个位置进行交换,以此类推。。。。

  • 涓缁存暟缁鐨鎺掑簭,鐢–璇█鍐欍俀AQ姹傚府蹇
    绛旓細include<stdio.h>void sort(int score[] ,int n){for(int i=1;i<n;i++)for(int j=0;j<n-i;j++)if(score[j]>score[j+1]){int t=score[j];score[j]=score[j+1];score[j+1]=t;}}int main(){ int n; printf("璇疯緭鍏ヨ鎺掑簭鐨勪釜鏁癨n"); scanf("%d",&n);...
  • c璇█:鐢ㄤ竴缁存暟缁 杈撳叆浜斾釜鏁 浣夸粬浠庡皬鍒板ぇ鎺掑簭 ,鐒跺悗鍐嶈緭鍏ヤ竴涓暟...
    绛旓細include <stdio.h>int main(){int a[10];int temp;printf("杈撳叆5涓暟锛歕n");for(int i=0;i<5;i++){ printf("绗%d涓暟",i+1);scanf("%d",&a[i]);} for( i = 0;i<5;i++)for(int j = i+1;j<5;j++)if(a[i]>a[j])//闄嶅簭鍙鏀瑰彉杩欓噷鐨勫ぇ浜庡彿灏辫浜唟temp = ...
  • 鐢–璇█缂栧啓鍑芥暟,鍔熻兘鏄彲浠ュ疄鐜涓缁存暟缁鐨勪粠灏忓埌澶х殑鎺掑簭,鏁扮粍闀垮害涓...
    绛旓細a[i+1]=temp; } } }int main(){ int a[8]={8,7,6,5,4,3,2,1}; func(a); for(int i=0;i<8;i++) { printf("%d ",a[i]); } return 0;}func灏辨槸鍔熻兘鍑芥暟瀹炵幇鏁扮粍a[8]鐨鎺掑簭銆
  • c璇█涓,鐢ㄤ竴缁存暟缁勬帓搴鍗佷釜鏁存暟,鎬庝箞鍋
    绛旓細include<stdio.h> int main(){ int i,j,min,t,a[10]={2,4,8,3,6,9,7,222,64,88};printf("鎺掑簭鍓嶇殑搴忓垪涓猴細\n");for(i=0;i<10;i++)//杈撳嚭鎺掑簭鍓嶇殑搴忓垪 { printf("%5d",a);} printf("\n");for(i=0;i<9;i++){ min=i;//鎶婃瘡娆″惊鐜殑绗竴涓暟浣滀负鏈灏忓 for(...
  • C璇█缂栫▼:缂栧啓璁$畻涓缁存暟缁勬帓搴鐨勫嚱鏁(鐢卞ぇ鍒板皬)
    绛旓細include<stdio.h>#include<stdlib.h>main(){ int a[10],i,j,t; for(i=0;i<10;i++) scanf("%d",&a[10]); for(i=0;i<9;i++) {for(j=0;j<9-i;j++) { if(a[j]
  • 鐢–璇█濡備綍灏嗕竴涓涓缁存暟缁涓殑鍏冪礌闅忔満鎺掑簭?
    绛旓細鍒╃敤rand()鍑芥暟浜х敓闅忔満鏁板瓧锛宺and()%n浜х敓灏忎簬n鐨勯殢鏈烘暟锛 鐒跺悗浜ゆ崲銆備笅闈㈡槸鎴戝啓鐨勭▼搴忥細include <stdio.h>#include <stdlib.h>int main(){ int a[1000], n, i, j, p, q, t; while(1) { printf("\n\n璇疯緭鍏涓缁存暟缁鐨勭淮鏁帮紝0缁撴潫 n = "); scanf("%d", &n);...
  • c璇█ 浣跨敤鍐掓场鎺掑簭灏涓缁存暟缁A涓殑N涓厓绱鍗囧簭鎺掑垪
    绛旓細2014-06-19 鐢╟璇█瀹氫箟涓涓ぇ灏忎负10鐨勬暣鍨嬫暟缁,鍒╃敤鍐掓场鎺掑簭娉曞皢鏁扮粍鍏... 47 2010-11-16 鐢–璇█瀵逛竴缁存暟缁勬帓搴,骞惰緭鍑宸叉帓濂藉厓绱犵殑鍘熸潵浣嶇疆 6 2013-07-28 C璇█浣跨敤鎸囬拡瀹炵幇鏁扮粍鍏冪礌鍐掓场鎺掑簭 4 2015-01-07 c璇█鍐掓场娉曞鏁扮粍a 杩涜鐢卞皬鍒板ぇ鐨勬帓搴 19 鏇村...
  • C璇█涓缁存暟缁缂栫▼:闅忔満浜х敓10涓100~200涔嬮棿鐨勯殢鏈烘暣鏁,鐒跺悗鎸夌収浠庡ぇ...
    绛旓細include <stdio.h>#include #include <stdlib.h>#define N (10)int main(void){int a[N],i,j,t;srand(time(NULL));for(i=0;i<N;++i)a[i]=rand()%101+100;for(i=0;i<N;++i){for(j=0;j<N-i-1;++j){if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;...
  • C璇█(绠鍗曠殑)缂栧啓绋嬪簭杈撳叆涓缁鏁村舰鏁扮粍a[10],灏嗗叾鎸夌敱灏忓埌澶鎺掑簭鍚庤緭 ...
    绛旓細杩欎釜搴旇鐢ㄨ捣娉℃硶鎺掑簭绠楁硶銆俰nclude<stdio.h> int main(){ int a[10];int i,j,k;printf("input 10 numbers:\n");for(i=0;i<10;i++锛墈//杈撳叆鍗佷釜鏁帮紝涓娆″惊鐜緭鍏10娆 scanf("%d",&a[i]);printf("\n");//鎹㈣ for(j=0;j<9;j++)//浠庡皬鍒板ぇ鎹㈣缁忓吀鏂规硶鍥涜 for(i=0;i<...
  • C璇█缂栫▼瀹氫箟鍑芥暟灏嗕竴涓暣鍨涓缁存暟缁鍙搴,鏁扮粍鐨勮緭鍏ュ拰杈撳嚭鍦ㄤ富鍑芥暟...
    绛旓細int i,n,array[100];printf("璇疯緭鍏鏁扮粍涓厓绱犵殑涓暟锛歕n");scanf("%d",&n);printf("璇疯緭鍏ユ暟缁勫厓绱狅細\n");for(i=0;i<n;i++)scanf("%d",array+i);printf("鏁扮粍鍘熷厓绱犵殑鎺掑簭涓猴細\n");for(i=0;i<n;i++)printf("%d ",array[i]);printf("\n");antitone(array,n);print...
  • 扩展阅读:对一维数组进行排序 ... 一维数组一般称为 ... 数组从大到小排序输出 ... c语言数据数组排序题 ... 一维数组简单例子 ... 数组排序从小到大代码 ... c#数组排序方法 ... 一维数组的使用 ... c语言将数组按降序排序 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网