常见的一些内部排序算法
排序:常见的也是基础的一些算法。
评价排序算法优劣的标准:
1. 时间复杂度:主要是分析关键字的比较次数和记录的移动次数。
2. 空间复杂度:分析排序算法中需要多少辅助内存。
3. 稳定性:如果两个记录A和B的关键字值是相同的,但是排序后A、B的先后顺序保持不变,则称之为算法是稳定的;反之就是不稳定的。
就现在的排序算法来看,排序大致可以分为内部排序和外部排序。如果整个排序的过程不再借助外部的存储器(如磁盘),所有的排序操作都是在内存中完成的,这样的排序就是内部排序。
如果参与排序的数据量非常的大,排序过程中可能无法将整个排序过程放在内存中完成,必须借助于外部存储器(如磁盘),这样的排序就是外部排序。对于外部排序最常见的算法就是多路归并排序,即是将原文件分解为多个能够一次性装入到内存的部分,分别把每一部分调入内存中完成排序,接下来在对多个有序文件进行归并排序。
内部排序:可以使用非常简单的排序算法来完成,如直接选择、直接插入等,但是也有一些优秀、复杂的排序算法,如快速排序、基数排序等。
这一系列的文章会将上述的十种排序。
1. 直接选择排序:
思路简单,n个数据需要n-1趟比较。以从小到大排序,每次一个与后面的比较如果大于就交换。
直接选择排序[时间复杂度:O(n2)、空间复杂度:O(1)、不稳定]
选择排序的具体实现:
package com.wpl.mysort;
/*
* 实现选择排序
* */
public class SelectSort {
//实现选择排序,实现从小到大的输出哈!
public static void mySelectSort(int []inputdata){
for(int i=0;i<inputdata.length-1;i++)
{
int minData=inputdata[i];
for(int j=i+1;j<inputdata.length;j++)
{
if(inputdata[j]<minData)
{
int temp=inputdata[j];
inputdata[j]=minData;
minData=temp;
}
}
inputdata[i]=minData;
}
}
public static void main(String[] args) {
int []test={23,2,34,8,34,28,98,89,13,8,33,56,75,67};
mySelectSort(test);
for(int i=0;i<test.length;i++)
{
System.out.print(test[i]+" ");
}
}
}