用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,并与第二个位置进行交换,以此类推。。。。
绛旓細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);...
绛旓細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]鐨鎺掑簭銆
绛旓細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(...
绛旓細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);...
绛旓細2014-06-19 鐢╟璇█瀹氫箟涓涓ぇ灏忎负10鐨勬暣鍨嬫暟缁,鍒╃敤鍐掓场鎺掑簭娉曞皢鏁扮粍鍏... 47 2010-11-16 鐢–璇█瀵逛竴缁存暟缁勬帓搴,骞惰緭鍑宸叉帓濂藉厓绱犵殑鍘熸潵浣嶇疆 6 2013-07-28 C璇█浣跨敤鎸囬拡瀹炵幇鏁扮粍鍏冪礌鍐掓场鎺掑簭 4 2015-01-07 c璇█鍐掓场娉曞鏁扮粍a 杩涜鐢卞皬鍒板ぇ鐨勬帓搴 19 鏇村...
绛旓細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;...
绛旓細杩欎釜搴旇鐢ㄨ捣娉℃硶鎺掑簭绠楁硶銆俰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<...
绛旓細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...