×

计算机算法指的是什么 算法

在计算机中,算法是指什么?计算机算法指的是什么

admin admin 发表于2022-07-06 09:41:19 浏览98 评论0

抢沙发发表评论

在计算机中,算法是指什么


计算机算法是以一步接一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程,或者说,算法是对计算机上执行的计算过程的具体描述。

一个算法必须具备以下性质:

(1)算法首先必须是正确的,即对于任意的一组输入,包括合理的输入与不合理的输入,总能得到预期的输出。如果一个算法只是对合理的输入才能得到预期的输出,而在异常情况下却无法预料输出的结果,那么它就不是正确的。-计算机算法指的是什么

(2)算法必须是由一系列具体步骤组成的,并且每一步都能够被计算机所理解和执行,而不是抽象和模糊的概念。

(3)每个步骤都有确定的执行顺序,即上一步在哪里;下一步是什么,都必须明确,无二义性。

(4)无论算法有多么复杂,都必须在有限步之后结束并终止运行;即算法的步骤必须是有限的。在任何情况下,算法都不能陷入无限循环中。

一个问题的解决方案可以有多种表达方式;但只有满足以上4个条件的解才能称之为算法。

扩展资料:

算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。

算法可以宏泛的分为三类:

一,有限的,确定性算法 这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。

二,有限的,非确定算法 这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。

三,无限的算法 是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。

参考资料来源:百度百科-计算机算法


计算机算法指的是什么


计算机算法是以一步接一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程,或者说,算法是对计算机上执行的计算过程的具体描述。

无论算法有多么复杂,都必须在有限步之后结束并终止运行;即算法的步骤必须是有限的。在任何情况下,算法都不能陷入无限循环中。算法必须是由一系列具体步骤组成的,并且每一步都能够被计算机所理解和执行,而不是抽象和模糊的概念。-算法

算法首先必须是正确的,即对于任意的一组输入,包括合理的输入与不合理的输入,总能得到预期的输出。如果一个算法只是对合理的输入才能得到预期的输出,而在异常情况下却无法预料输出的结果,那么它就不是正确的。

扩展资料

特点

1、有穷性。一个算法应包含有限的操作步骤,而不能是无限的。事实上“有穷性”往往指“在合理的范围之内”。如果让计算机执行一个历时1000年才结束的算法,这虽然是有穷的,但超过了合理的限度,人们不把他视为有效算法。-计算机算法指的是什么

2、 确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。算法中的每一个步骤应当不致被解释成不同的含义,而应是十分明确的。也就是说,算法的含义应当是唯一的,而不应当产生“歧义性”。-算法

3、有零个或多个输入。所谓输入是指在执行算法是需要从外界取得必要的信息。

4、 有一个或多个输出。算法的目的是为了求解,没有输出的算法是没有意义的。

5、有效性。 算法中的每一个 步骤都应当能有效的执行。并得到确定的结果。

参考资料来源:百度百科-计算机算法


C语言排序算法一共多少种


  1. 选择排序

#include 《iostream》
using namespace std;
void select_sort(int arr, int num);
void output_array(int arr, int num);
int main()
{
    int a;
    for(int i=0; i《10; i++)
    {
        cin》》a[i];
    }
    select_sort(a,10);
    output_array(a,10);
    return 0;
}
void select_sort(int array,int n) //形参array是数组名
{
    int i,j,k,t;
    for(i=0; i《n-1; i++)
    {
        k=i;  //先设第i个就为最小
        for(j=i+1; j《n; j++)
            if(array[j]《array[k])
                k=j;   //通过循环,得到k为最小
        t=array[k];    //交换a[i]和a[k]
        array[k]=array[i];
        array[i]=t;
    }
    return;
}
void output_array(int arr, int num)
{
    int i;
    for(i=0; i《num; i++)
    {
        cout《《arr[i];
        cout《《endl;
    }
    return;
}

2.冒泡排序

#include《stdio.h》
int main()
{
int i,j,a,t;
for(i=0;i《10;i++)
scanf(“%d“,&a[i]);
for(i=0;i《10;i++)
for(j=i+1;j《10;j++)
if(a[i]》a[j])
{
t=a[j];
a[j]=a[i];
a[i]=t;
}
for(i=0;i《10;i++)
printf(“%d “,a[i]);
return 0;
}

3.堆排序

#include《iostream》
using namespace std;
void  paidui(int a,int i,int m)
{
int k,t;    
t=a[i]; 
k=2*i+1;    
while (k《m)    
{        
if ((k《m-1)&&(a[k]《a[k+1])) 
k++;   
if (t《a[k]) 
{
a[i]=a[k]; 
i=k; 
k=2*i+1;
}        
else break; 
}    
a[i]=t;
}
void duipai(int a, int n)  
{
int i,k; 
for (i=n/2-1;i》=0;i--) 
paidui(a,i,n);     
for (i=n-1; i》=1; i--)    
{  
k=a; 
a=a[i]; 
a[i]=k;  
paidui(a,0,i);    
}}
int main() 
{  
int a,i; 
for(i=0;i《10;i++)  
cin》》a[i];
duipai(a,10); 
for(i=0;i《10;i++)
cout《《a[i]《《endl;
}

4.快速排序

#include《iostream》
using namespace std;
void Quicksort(int a,int low,int high)
{
    if(low》=high)
    {
        return;
    }
    int first=low;
    int last=high;
    int key=a[first];
    while(first《last)
    {
while(first《last&&a[last]》=key)
            --last;
        a[first]=a[last];
        while(first《last&&a[first]《=key)
            ++first;
        a[last]=a[first];
}
    a[first]=key;
    Quicksort(a,low,first-1);
    Quicksort(a,last+1,high);
}


int main()
{
    int i,a,x,n=0;
while(cin》》x)
{
a[n]=x;
n++;
}
n--;
Quicksort(a,0,n);
for(i=0;i《=n;i++)
cout《《a[i]《《“ “;
cout《《endl;
    return 0;
}

5. 基数排序

#include 《stdio.h》
#include 《stdlib.h》
int main(){
int data={73,22,93,43,55,14,82,65,39,81};        //对十个数进行排序
int temp={0};        //构造一个临时二维数组,其值为0
int order={0};        //构造一维数组,其值为0
int i,j,k,n,lsd;
k=0;n=1;
for (i=0;i《10;i++) printf(“%d “,data[i]);         //在排序前,对这10个数打印一遍
putchar(’\n’);
while (n《=10){
for (i=0;i《10;i++){
lsd=((data[i]/n)%10);         //lsd先对个位取余,然后再对十位取余,注意循环
temp[lsd][order[lsd]]=data[i];        //temp=73,temp=22,temp=93,temp=43,⋯⋯
order[lsd]++;        //需要区分的是lsd和order[lsd],这两个不是一样的概念嗷
}
printf(“\n重新排列: “);
for (i=0;i《10;i++){
if(order[i]!=0)
for (j=0;j《order[i];j++){


data[k]=temp[i][j];
printf(“%d “,data[k]);
k++;
}
order[i]=0;
}
n*=10; //第二次用十位
k=0;
}
putchar(’\n’);
printf(“\n排序后: “);
for (i=0;i《10;i++) printf(“%d “,data[i]);
return 0;
}

6.希尔排序

#include《iostream》
using namespace std;
void shell_sort(int a,int n);
int main()
{
    int n,a;
    cin》》n;
    for(int y=0;y《n;y++)
        cin》》a[y];
    shell_sort(a, n);
      for(int i=0; i《n; i++)
          cout《《a[i]《《“ “;
      cout《《endl;
}

void shell_sort(int a, int n)
{
    int gap,k,temp;//定义增量;
    for(gap = 3; gap 》0; gap--)//设置初始增量,递减;
    {
        for(int i=0; i《gap; i++)//按增量分组;
        {
            for(int j = i+gap; j《n; j=j+gap)//每组分别比较大小;
            {
                if(a[j]《a[j-gap])
                {
                    temp = a[j];
                    k = j-gap;
while(k》=0&&a[k]》temp)
                    {
                        a[k+gap] = a[k];
                        k = k-gap;
                    } 

                   a[k+gap] = temp;
                }
            }
        }
    }
}

7.归并排序

#include《iostream》
using namespace std;
void MergeSort(int p,int s,int m,int t)
{
     int q;                        //q用来存放排好的序列
 int i=s;
 int j=m+1;
 int k=s;
while(i《=m&&j《=t)
 {
 if(p[i]《=p[j])
 q[k++]=p[i++];
 else
 q[k++]=p[j++];
 }
 if(i《=m)
 while(i《=m)
 q[k++]=p[i++];
 else while(j《=t)
 q[k++]=p[j++];
 for(int n=s;n《=t;n++)
             p[n]=q[n];
}
 void Merge(int p,int s,int t)
 {
 if(s《t)
 {
 int m=(s+t)/2;  //将数组分成两半
 Merge(p,s,m);//递归拆分左数组
 Merge(p,m+1,t);//递归拆分右数组
 MergeSort(p,s,m,t);//合并数组
     }
 }
 int main()
 {
     int n;
 int p;
 cin》》n;
  for(int i=0; i《n; i++)
         cin》》p[i];
 Merge(p,0,n-1);
 for(int j=0;j《n;j++)
 cout《《p[j]《《“ “;
 cout《《endl;
 return 0;
 }

排序方法基本就这些,还有双向冒泡这种拓展的排序方法,还有直接排序如桶排序