问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

计算机程序语言包括哪几个基本算法?

发布网友 发布时间:2022-04-29 14:55

我来回答

4个回答

热心网友 时间:2023-06-21 23:49

冒泡排序、选择排序、、插入排序、希尔排序、归并排序、堆排序

Java版代码:

package com.kevin;

/**
* 七种排序算法Java版
*
* @author Administrator
*
*/
public class Sort {

/**
* 打印数组
*
* @param data
*/
public static void displayData(int[] data) {
for (int d : data) {
System.out.print(d + " ");
}
System.out.println();
}

/**
* 冒泡排序算法,时间复杂度O(n2),算法具有稳定性,堆排序和快速排序算法不具有稳定性,即排序后相同元素的顺序会发生变化
*
* @param src
*/
public static void bubbleSort(int[] src) {
if (src.length > 0) {
int length = src.length;
for (int i = 1; i < length; i++) {
for (int j = 0; j < length - i; j++) {
if (src[j] > src[j + 1]) {
int temp = src[j];
src[j] = src[j + 1];
src[j + 1] = temp;
}
}
}
}
}

/**
* 快速排序,时间复杂度O(nlogn),最坏时间复杂度O(n2),平均时间复杂度O(nlogn),算法不具稳定性
*
* @param src
* @param begin
* @param end
*/
public static void quickSort(int[] src, int begin, int end) {
if (begin < end) {
int key = src[begin];
int i = begin;
int j = end;

while (i < j) {
while (i < j && src[j] > key) {
j--;
}
if (i < j) {
src[i] = src[j];
i++;
}
while (i < j && src[i] < key) {
i++;
}
if (i < j) {
src[j] = src[i];
j--;
}
}

src[i] = key;

quickSort(src, begin, i - 1);
quickSort(src, i + 1, end);
}

}

/**
* 选择排序,分为简单选择排序、树形选择排序(锦标赛排序)、堆排序 此算法为简单选择排序
*
* @param a
*/
public static void selectSort(int[] a) {
int length = a.length;
for (int i = 0; i < length; i++) {
int minIndex = i;

for (int j = i + 1; j < a.length; j++) {
if (a[j] < a[minIndex]) {
minIndex = j;
}
}

if (minIndex != i) {
int temp = a[minIndex];
a[minIndex] = a[i];
a[i] = temp;
}
}
}

/**
* 插入排序,适用于少量数据的排序,时间复杂度O(n2),是稳定的排序算法,原地排序
*
* @param a
*/
public static void insertSort(int[] a) {
int length = a.length;

for (int i = 1; i < length; i++) {
int temp = a[i];
int j = i;
for (; j > 0 && a[j - 1] > temp; j--) {
a[j] = a[j - 1];
}
a[j] = temp;
}
}

/**
* 归并排序算法,稳定排序,非原地排序,空间复杂度O(n),时间复杂度O(nlogn)
*
* @param a
* @param low
* @param high
*/
public static void mergeSort(int a[], int low, int high) {
if (low < high) {
mergeSort(a, low, (low + high) / 2);
mergeSort(a, (low + high) / 2 + 1, high);
merge(a, low, (high + low) / 2, high);
}
}

/**
* 归并排序辅助方法,合并
*
* @param a
* @param low
* @param mid
* @param high
*/
private static void merge(int[] a, int low, int mid, int high) {
int[] b = new int[high - low + 1];
int s = low;
int t = mid + 1;
int k = 0;
while (s <= mid && t <= high) {
if (a[s] <= a[t])
b[k++] = a[s++];
else
b[k++] = a[t++];
}
while (s <= mid)
b[k++] = a[s++];
while (t <= high)
b[k++] = a[t++];
for (int i = 0; i < b.length; i++) {
a[low + i] = b[i];
}
}

/**
* 希尔排序的一种实现方法
*
* @param a
*/
public static void shellSort(int[] a) {
int temp;
for (int k = a.length / 2; k > 0; k /= 2) {
for (int i = k; i < a.length; i++) {
for (int j = i; j >= k; j -= k) {
if (a[j - k] > a[j]) {
temp = a[j - k];
a[j - k] = a[j];
a[j] = temp;
}
}
}
}
}

/**
* 堆排序,最坏时间复杂度O(nlog2n),平均性能接近于最坏性能。由于建初始堆所需的比较次数多,故堆不适合记录较少的比较 堆排序为原地不稳定排序
*
* @param array
*/
public static void heapSort(int[] array) {
for (int i = 1; i < array.length; i++) {
makeHeap(array, i);
}

for (int i = array.length - 1; i > 0; i--) {
int temp = array[i];
array[i] = array[0];
array[0] = temp;
rebuildHeap(array, i);
}
}

/**
* 堆排序辅助方法---创建堆
*
* @param array
* @param k
*/
private static void makeHeap(int[] array, int k) {
int current = k;
while (current > 0 && array[current] > array[(current - 1) / 2]) {
int temp = array[current];
array[current] = array[(current - 1) / 2];
array[(current - 1) / 2] = temp;
current = (current - 1) / 2;
}

}

/**
* 堆排序辅助方法---堆的根元素已删除,末尾元素已移到根位置,开始重建
*
* @param array
* @param size
*/
private static void rebuildHeap(int[] array, int size) {
int currentIndex = 0;
int right = currentIndex * 2 + 2;
int left = currentIndex * 2 + 1;
int maxIndex = currentIndex;
boolean isHeap = false;
while (!isHeap) {
if (left < size && array[currentIndex] < array[left]) {
maxIndex = left;
}
if (right < size && array[maxIndex] < array[right]) {
maxIndex = right;
}
if (currentIndex == maxIndex) {
isHeap = true;
} else {
int temp = array[currentIndex];
array[currentIndex] = array[maxIndex];
array[maxIndex] = temp;
currentIndex = maxIndex;
right = currentIndex * 2 + 2;
left = currentIndex * 2 + 1;
}
}
}

public static void main(String[] args) {
int data[] = { 2, -1, 5, 4, 6, 8, 7, -3 };
Sort.displayData(data);

Sort.bubbleSort(data);
Sort.displayData(data);
}

}

热心网友 时间:2023-06-21 23:50

比较基本的算法有:排序算法;枚举、回溯;递归、递推、分治;深度优先搜索、宽度优先搜索;贪心;动态规划。

热心网友 时间:2023-06-21 23:50

有点忘了,印象中至少有:循环,递归,开关,条件,还有goto。任何语言都是这几种最基本的

热心网友 时间:2023-06-21 23:51

冒泡排序、选择排序、、插入排序、希尔排序、归并排序、堆排序deng deng
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...DE分别在BC AC上,且AE=CD,连接AD,BE交于点p 过B作BQ⊥AD Q为垂足... ...AC上的点,且AE=CD 连接AD BE 交于点P 作BQ垂 ...ac上的点,且ae=cd,连接ad、be交于点p作BQ⊥AD,垂足为Q,求证BP=2... ...AC上的点,且AE=CD,链接AD、BE交于点P,作BQ⊥AD ...AC上的点,且AE=CD,连结AD、BE交于点P,作BQ⊥AD,垂足为Q. ...刚刚大学毕业。由于生病,导致目前没有工作,大学四年的女友也因为我... 形容“荷花的特点”有什么词语 梦见比人还高大的石头蛤蟆,杀人拆房子。我和其他人一起翘辫子了._百度... 梦见别人送我一条蛇,我却把他不小心放了.可是我用石头打了它一下... 作文 我生活在鼓励中 如图,如何通过ACF和PACF判断sarima的系数 皆成梦幻想到无非二三更时无长少总是凡功名睡至一百年后俱是古人选八个词组成一副对联 手持CFA证书是一种什么感受 百年之后具是古人上一句是气啥 在一颗具有5层的满二叉树中,结点总数为【】 怎么看ACF图和PACF图 将整数数组按照堆排序的方式原地进行升序排列,请问在第一轮排序结 在备考CFA的时候,每天都学到很晚,好不容易学完,就想着休息,看到有人建议要每天总结,有必要吗? CFA学习心得 C语言:若原始记录接近正序或反序,则选用堆排序,若初始记录无序则最... 列表对象的sort()方法用来对列表元素进行原地排序,该函数返回值为 用公牛双控开关安装楼梯上下怎么接线 单片机 试编程将内部RAM50H~70中的数据由大到小进行原地排列 排序算法最快的是哪种说说原理,哪些是不用申请额外空间的 这是公牛双控开关,线怎么接啊? 常用的原址排序算法有那哪些? 新型农村社会养老保险制度是强制的吗? 原地排序的排序 宽带安装地址是什么 原地排序法是指___。 怎么根据ACF和PACF判断是否为平稳数列 C语言高手请回答我几个问题,关于数组排序问题 睡至二三更时,凡功名皆成幻境,想到一百年后,无少长俱是古人。把上联二字和下联一字去掉可以更简洁吗?_百度问一问 怎样用ACF和PACF图 确立arima模型 古人一百年称什么年 懂C++的请进,有关于快速排序的疑问 祖国发展我成长的诗歌(3-4分钟) 我为什么要考CFA 超级敷衍的学习心得 古人于为学终身与之俱是什么意思? 图中的序列是白噪声吗?白噪声序列怎么检验,检验原理是什么? 考CFA(特许金融分析师)需要什么条件?? 同时有什么学习心得吗? 有没有不用事先录音也可以变音的变声器 spss 的时间序列ACF和PACF图,判断p,q 有没有那种可以直接变声不需要录音的变声器,手机能用的? 请问下怎么用SPSS建立ARIMA模型预测某个地区未来几年的GDP发展速度? 如何备考CFA? SPSS中判断ACF和PACF图,差分p,d,q 求问大神acf,pacf 图怎么看,想确定arch模型的阶数 怎么通过acf图,pacf图判断p,d,q BBSKY黄鹤影院无法收看