编程语言的几种基本算法主要有以下几个:
1、插入排序(直接插入排序、希尔排序)
2、交换排序(冒泡排序、快速排序)
3、选择排序(直接选择排序、堆排序)
4、归并排序
5、分配排序(箱排序、基数排序)
按照条件来使用排序算法:
所需辅助空间最多:归并排序
所需辅助空间最少:堆排序
平均速度最快:快速排序
不稳定:快速排序、希尔排序、堆排序
选择排序算法的时候:
1、数据的规模
2、数据的类型
3、数据已有的顺序
一般来说,当数据规模较小时,应该直接插入排序或冒泡排序。任何排序算法在数据量小时基本体现不出来差距。考虑数据的类型,比如如果全部是正整数,那么考虑使用桶排序最优。考虑数据已有顺序,快速排序是一种不稳定的排序(可以改进),对于大部分排好的数据,快速排序会浪费大量不必要的步骤。数据量极小,而且已经基本排好序,冒泡是最佳选择。我们说快速排序好,是指大量随机数据下,快速排序效果最理想。而不是所有情况。
一、插入排序
1、直接插入排序
讲一个记录插入到已经排好序的有序表中。
①sorted数组的第0个位置没有放数据
②从sorted第二个数据开始处理;如果该数据比它前面的数据要小,说明该数据要往前面移动。
步骤:
a.首先将数据备份放到sorted的第0个位置当哨兵
b.然后将该数据前面那个数据后移
c.然后往前搜索,找到插入位置
d.找到插入位置之后讲,第0个位置的那个数据插入对应位置。
时间复杂度:O(nn),当待排记录序列为正序时,时间复杂度提高至O(n)
直接插入排序例子java语言实现
public class InsertionSort {
//插入排序: 直接插入排序, 希尔排序
public static void straighInsertionSort(double[] sorted){
int length = sorted.length;
for(int i=2; i=0; j--){
if(sorted[j] > sorted[0]){
sorted[j+1] = sorted[j]; //后移一位
}else{
insert = j+1; //插入的位置
break;
}
}
sorted[insert] = sorted[0];
}
}
}
public static void main(String[] args) {
Random random = new Random(6);
int arraySize = 21;
double[] sorted = new double[arraySize];
System.out.println("排序前:");
for(int i=1;i
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习