各种排序算法
来源:互联网 发布:php array push 编辑:程序博客网 时间:2024/09/21 06:17
1直接选择排序:
每次将后面的最小的找出来插入前面的已排好的序中。同理,具有n个记录的序列要做n-1次排序。时间复杂度为O(n2)。
public void SelectSort(elemtype x[],int n)
{
int i,j,Small;
elemtype Temp;
for(i=0;i<n-1;i++)
{
Small=i;
for(j=i+1;j<n;j++)
{
if(x[j]<x[Small])
Small=j;
}
if(Small!=i)
{
Temp=x[i];
x[i]=x[Small];
x[Small]=Temp;
}
}
}
2冒泡排序:
两个两个比较,将大的往后移。通过第一次冒泡排序,使得待排序的n个记录中关键字最大的记录排到了序列的最后一个位置上。要做n-1次排序。时间复杂度为O(n2)。
for (int i = 1; i < data.length; i++)
{
//将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < data.length - i; j++)
{
if (data[j] > data[j + 1])
{
//交换相邻两个数
swap(data, j, j + 1);
}
}
}
3快速排序:
快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按
次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 时间复杂度为O(nlog2n)。
public class QuickSort
{
public static int[] QuickSort0(int[] pData, int left, int right)
{
int i= left, j= right;
int middle, strTemp;
middle = pData[(left + right) / 2];
do
{
while ((pData[i] < middle) && (i < right))
i++;
while ((pData[j] > middle) && (j > left))
j--;
if (i <= j)
{
strTemp = pData[i];
pData[i] = pData[j];
pData[j] = strTemp;
i++;
j--;
}
}
while (i <= j);
if (left < j)
{
QuickSort0(pData, left, j);
}
if (right > i)
{
QuickSort0(pData, i, right);
}
return pData;
}
public static void main(String[] argv)
{
int[] pData = { 1,84, 85, 67,600, 88,999 };
QuickSort0(pData, 0, pData.length - 1);
}
}
4插入排序:
将一个记录插入到已排好序的有序表(有可能是空表)中,从而得到一个新的记录数增1的有序表。
for (int i = 1; i < data.length; i++)
{
//保证前i+1个数排好序
for (int j = 0; j < i; j++)
{
if (data[j] > data[i])
{
//交换在位置j和i两个数
swap(data, i, j);
}
}
}
- 【算法】各种排序算法
- 各种排序算法
- 各种排序算法
- 各种排序算法收集
- 各种排序算法
- 各种排序算法小结
- 各种排序算法小结
- 各种内部排序算法!
- 各种排序算法小结
- 各种排序算法
- 各种排序算法
- 各种排序算法介绍
- 各种排序算法
- 各种排序算法比较
- 各种排序算法
- 各种排序算法
- C++各种排序算法
- 各种排序算法
- Struts1.2中的MappingDispatchAction 配置
- Perl 调用其他程序方法
- IE6兼容的一点见解
- 在WebBroswer里面显示Word
- 请不要做浮躁的人——虽是老帖,值得一看
- 各种排序算法
- Visual Studio 2008 快捷键大全
- 基于XOR的加密程序
- Oracle___DML
- 汽车加油问题--贪心法
- C++中抽象类和接口类的区别
- 数据库备份与恢复测试
- Ioc的实现及应用
- 现在的我