入门级排序算法

来源:互联网 发布:网络手游排行榜2015 编辑:程序博客网 时间:2024/05/28 05:14

选择排序:



void SelectionSort(int array[], int len) // O(n*n)
{
    int i = 0;
    int j = 0;
    int k = -1;//k用于标识最小值位置
    
    for(i=0; i<len; i++)//比较i趟,核心步骤
    {
        k = i;
        
        for(j=i; j<len; j++)//通过for循环查找最小值
        {
            if( array[j] < array[k] )
            {
                k = j;
            }
        }
        
        swap(array, i, k);//找到最小值后,放到i位置上
    }
}

插入排序:



void InsertionSort(int array[], int len) // O(n*n)//比较次数相对于选择排序少一点,平均复杂度低一点
{
    int i = 0;
    int j = 0;
    int k = -1;
    int temp = -1;
    
    for(i=1; i<len; i++)//从第一个元素开始,第零个元素作为初始序列
    {
        k = i;
        temp = array[k];//目前待插入的元素
        
        for(j=i-1; (j>=0) && (array[j]>temp); j--)//在有序序列中查找应插入的位置,任意一个元素都可以作为有序序列
        {
            array[j+1] = array[j];//向后移动
            k = j;//应插入的位置
        }
        
        array[k] = temp;
    }
}

冒泡排序



void BubbleSort(int array[], int len) // O(n*n)
{
    int i = 0;
    int j = 0;
    int exchange = 1;//标记变量exchange,貌似可要可不要
    
    for(i=0; (i<len) && exchange; i++)//进行了交换才能继续,否则可以结束了
    {
        exchange = 0;
        
        for(j=len-1; j>i; j--)//开始冒泡了
        {
            if( array[j] < array[j-1] )
            {
                swap(array, j, j-1);
                
                exchange = 1;
            }
        }
    }
}

0 0