C++按照正态分布来排列整型数组元素_C 语言

题目要求如下:

给定一个数组input[],

如果数组长度n为奇数,则将数组中最大的元素放到output[]数组最中间的位置,

如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,

然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。

这种处理后结果,如果按照元素的值表示一种分布的图形的话,那绘制后的图形应该是正态分布。

关于正态分布:

正态分布(Normal distribution)又名高斯分布(Gaussian distribution),是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。若随机变量X服从一个数学期望为μ、方差为σ^2的高斯分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。因其曲线呈钟形,因此人们又经常称之为钟形曲线。我们通常所说的标准正态分布是μ= 0,σ = 1的正态分布。

这里只是从结果上产生联系,算法与正态分布无关。

代码实现如下:

void sort(int input[],int output[], int n)
{
  int m=n;
  //cout<<m<<endl; 

  int i,j,temp;
  bool exchange;//交换标志
  for(i=0;i<m-1;i++)
  { //最多做n-1趟排序
    exchange=FALSE; //本趟排序开始前,交换标志应为假
    for(j=m-2;j>=i;j--) //对当前无序区R[i..n]自下向上扫描
      if(input[j+1]<input[j])
      {//交换记录
        temp=input[j+1]; //R[0]不是哨兵,仅做暂存单元
        input[j+1]=input[j];
        input[j]=temp;
        exchange=TRUE; //发生了交换,故将交换标志置为真
      }
      if(!exchange) //本趟排序未发生交换,提前终止算法
        break;
      //cout<<input[5]<<endl;
  }  

  for(int wc1=0; wc1<m; wc1++)//只是来显示排序结果~
  {
    cout<<input[wc1]<<" ";
  }
  cout << endl; 

  int q=m-1;
  if((m%2)==0)
  {
    int mid=m/2;
    for (int tempmid=0; tempmid<=mid; tempmid++)//注意循环语句的执行顺序
    {
      output[mid+tempmid]=input[q];
      q--;
      output[mid-tempmid-1]=input[q];
      q--;
    }
  } 

  if((m%2)!=0)//注意循环语句的执行顺序
  {
    int mid=q/2;
    output[mid]=input[q];
    for (int tempmid=1;tempmid<=mid;tempmid++)
    {
      q--;
      output[mid-tempmid]=input[q];
      q--;
      output[mid+tempmid]=input[q];
    }
  } 

  for(int wc=0; wc<m; wc++)
  {
    cout<<output[wc]<<" ";
  }
  cout << endl;
} 
int main()
{
   int input[] = {3, 6, 1, 9, 7, 8, 2};
   int wc=0;
   int nCount = sizeof(input)/sizeof(int);
   for(wc=0; wc<nCount; wc++)//
  {
    cout<<input[wc] << " ";
    //cout<<"\n"<<endl;
  }
  cout << endl; 

  int output[]= {3, 6, 1, 9, 7, 8, 2};
  sort(input,output, nCount); 

  return 0;
} 

测试结果:

当int input[] = {3, 6, 1, 9,7, 8, 2, 10};,结果如下:

3 6 1 9 7 8 2 10

1 2 3 6 7 8 9 10

1 3 7 9 10 8 6 2

当int input[] = {3, 6, 1, 9,7, 8, 2, 10};,结果如下:

3 6 1 9 7 8 2

1 2 3 6 7 8 9

2 6 8 9 7 3

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索正态分布
数组正态分布
java数组元素逆序排列、数组元素倒序排列、整型数组、java 整型数组、整型数组初始化,以便于您获取更多的相关知识。

时间: 2024-09-15 23:51:35

C++按照正态分布来排列整型数组元素_C 语言的相关文章

c语言-关于整型数组中数字使用printf输出的问题

问题描述 关于整型数组中数字使用printf输出的问题 #include int main(void) { int number[40]; scanf("%s", number); printf("%d", number[0]); return 0; } 数字以字符格式存在数组里,既然字符以数字的形式存储,那为何用%d输出是垃圾值呢?用%c却是正常的 解决方案 字符格式和整型是不同的,字符0对应着48,字符1对应着整数49.... 解决方案二: 字符'0',对应0x

怎么取得整型数组中连续相同的数字并输出打印,用java实现,也就是输出副本,只输出那些连续相同的数字

问题描述 怎么取得整型数组中连续相同的数字并输出打印,用java实现,也就是输出副本,只输出那些连续相同的数字 怎么取得整型数组中连续相同的数字并输出打印,用java实现,也就是输出副本,只输出那些连续相同的数字 解决方案 判断一下一个数字前后是否有相同的,有相同的话就输出,比如下面这样: int array [] = { 2,1,3,4,4,4,9,9,1,0,1,1,2 }; //只输出连续的数字 System.out.print("连续数字:"); for (int i=0;i&

c语言,对结构体中的整型数组进行赋值.....

问题描述 c语言,对结构体中的整型数组进行赋值..... c语言中,在结构体里声明整型数组,想对整型数组赋值,只能用循环吗?如果我想这样呢..... typedef struct Data { int arr[10]; }Data; int main() { Data data; data = (Data)malloc(sizeof(Data)); data->arr[10]={1,3,2,4,5,6,7,8,9,0}; . ... ... ... } 这样可以吗? 解决方案 绝对不可以.数组作

C语言删除无序整型数组中的重复元素及时间复杂度

遇到一个题,大概要求是写一个函数处理来去掉一个无序的整型数组(例如int i_arr[] = { 1, 2, 2, 3, 4, 2, 3, 5 };)中重复的元素,并返回最终的长度. 1 思路 看到这道题的时候,第一反应就是需要删除元素,然后联想到单链表.但是后面一想还是不划算,因为单链表还得先把数组中的元素遍历到链表节点中. 换一下思路,可以先创建另一个整型数组(大小和原数组一样),然后正向遍历数组中的元素,比较当前元素和它前面所有的元素是否重复,如果这个整数之前没有出现过,那么就放到新的数组

在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素。

题目:在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素.要求:(1)给出算法的基本设计思想.(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释.(3)说明你所设计算法的时间复杂度和空间复杂度. (1)基本的设计思想: 一个数字出现的次数超过了长度的一半, 那么我们可以这样认为这个数字出现的个数一定大于其他全部数字出现的个数之和.算法的步骤如下: ①设数组为data[],数组长度为n,i=1.置currentAxi

List中有三个整型数组对象,如何比较数组对象中的元素

问题描述 三个数组长度一样,我想比较三个数组对象的第一个元素,找出最大的保留,以此类推:int[]a1=newint[]{3,6,5,0};int[]a2=newint[]{1,9,7,6};int[]a3=newint[]{5,3,5,8};比较后得到新数组对象ax=newint[]{5,9,7,8};请问如何在List中实现呢?thanks 解决方案 解决方案二:笨办法:1.循环数组长度次2.每次比较3个数,取最大数3.存入新数组解决方案三:能给个确切的例子吗?谢过了解决方案四:int[]a

整型数组转换为字符串

package cn.ic; //将一个整形数组转换成字符串,然后输出 public class StringTest1 { public static void main(String[] args) { StringDemo1 demo1=new StringDemo1(); int array []=new int []{1,2,3,4}; System.out.println(demo1.method(array)); } } class StringDemo1{ public Stri

将字符串里的整型数据排序(二)

package cn.ic; import java.util.Arrays; //要求:将字符串"1,3,4,0,-3"里面的数值升序排列然后输出一个字符串 //步骤: //1 将字符串拆分为字符数组,利用split() //2 将字符串数组转换为整型数组,利用Integer.parseInt(String string); //3 将整型数组排序,利用Arrays.sort() //4 将整型数组转换为字符串,利用StringBuffer //其实不用函数intArrayToStr

java-JAVA获取字符型数组的问题

问题描述 JAVA获取字符型数组的问题 自学java中,为啥不能像获取int型的一样获取char型的数据,在Scanner类中为啥没有nextChar(); 而用String又为什么可以,求解答~ 解决方案 以为int可以看做一个数字类别中常用的一个类别. 而char完全可以归类到String中去. 解决方案二: 用不着,用string获取了,tochararray就可以了. 解决方案三: char的本质就是int,可以通过nextInt获取呀. 解决方案四: java中字符型和整型的转换问题j