首页 > 代码库 > 几大排序算法理解

几大排序算法理解

1.插入排序算法

  跟我们平时打扑克时排序相似,左手先拿起一张牌,不需要比较,当拿起第二张牌时需要和之前的牌进行比较,如果小于之前的牌i,并且有大于牌i-1时,i就是该张牌要插入的位置,牌i及其以后的牌需要给它腾位置 a[k+1] = a[k];腾好位置之后就把它插入到i的位置即可。

实现算法:

 

void InsertSort(int s[],int n)
{

        int i, j, k;
        for(i = 1;i<n;i++)
        {
            //为a[i]在前面的a[0...i-1]有序区间中找一个合适的位置(从前到后)  
            for(j=i-1;j>=0;j--)
                if(s[j]<s[i])
                break;

            //如找到了一个合适的位置  
            if(j != i-1)
            {
                //将比a[i]大的数据向后移  
                int temp = s[i];
                for(k = i-1;k>j;k--)
                    s[k+1] = s[k];
                //将a[i]放到正确位置上  此时的k = j,故s[j+1] = temp更方便理解
                s[k +1] = temp;
            }
        }
}

 

 

2.快速排序

  分区排序思想,首先选取一个元素,把所有元素分成比它小(左边)和比它大(右边)两部分,然后再对左右两边进行递归。

算法实现:

  

void QuickSort(int s[], int l, int r)
{
    
    if (l < r)
    {
        int i = l, j = r, x = s[l];
        while (i < j)
        {
            while (i < j && s[j] >= x)
                j--;
            if (i < j)
                s[i++] = s[j];
            while (i < j && s[i] < x)
                i++;
            if (i < j)
                s[j--] = s[i];

        }
        s[i] = x;
        QuickSort(s, l, i - 1);
        QuickSort(s, i + 1, r);
    }

};

 

几大排序算法理解