zoukankan      html  css  js  c++  java
  • 排序算法总结(3.15)

    一、常用的排序算法及特点

    1. 快速排序
    2. 选择排序
    3. 冒泡排序
    4. 堆排序
    5. 归并排序
    6. 希尔排序
    7. 桶排序

    1、快速排序是不稳定的,最坏时间复杂的O(n^2),平均和最好时间负责度均为O(nlogn)。它的基本思想是分治。

    (1)从序列中找出一个pivot,

    (2)然后将数组中的元素分别与pivot比较,放在pivot的两侧,分成了连个区域S1,S2。

    (3)然后对S1、S2再执行相同的算法即可得到结果。

    (4)基本条件:S1,S2的长度为1或者0。

    // ConsoleApplication5.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    
    #include  <iostream>
    using namespace std;
    void Quick_Sort(int a[], int l, int r);
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        int a[5] = { 3, 1, 5, 2, 4 };
        Quick_Sort(a,0,4);
        for (int i = 0; i < 5; i++)
        {
            cout << a[i] << endl;
        }
        return 0;
    }
    
    /*
    快速排序,一种时间复杂度为O(NlogN)的排序算法
    特点:大数据量速度比较快,能达到O(NlogN)的时间复杂度,但是不稳定,因为枢纽元素的选择,可能会导致算法运行时间的不同
    void Quick_Sort(int a[], int l,int r)
    {
    
    }
    1、选定枢纽元素,一般取第一个元素,即key =a[l],i=l;j=r;
    2、从数组后方向前遍历,即j--,直到找到小于key的元素,将aa[j]保存到a[i]
    3、从数组左侧往右遍历,即i++,直到a[i]大于key,将a[i]保存到a[j]
    4、一直循环,知道i==j,将key值放入a[i]
    5、继续对枢纽元素左侧,右侧分别进行快速排序(分治的思想)
    
    */
    
    void Quick_Sort(int a[], int l, int r)
    {
    
        int i = l, j = r;
        int key = a[i];
        if (i > j)
            return;
        while (i < j)
        {
            while (i < j && a[j] >= key)
            {
                j--;
            }
            if (i < j)
            {
                a[i++] = a[j];
            }
            while (i < j && a[i] <= key)
            {
                i++;
            }
            if (i < j)
            {
                a[j--] = a[i];
            }
        }
        a[i] = key;
    
        Quick_Sort( a, l, i - 1);
        Quick_Sort( a, i + 1, r);
    
    }
  • 相关阅读:
    基础问题汇总
    c primer plus 习题答案(5)
    c primer plus 习题答案(4)
    c primer plus 习题答案(3)
    c primer plus 习题答案(2)
    c primer plus 习题答案(1)
    渲染引擎之材质系统
    渲染引擎之坐标变换
    渲染引擎之底层视角
    渲染引擎之渲染管线
  • 原文地址:https://www.cnblogs.com/wll-zju/p/4339824.html
Copyright © 2011-2022 走看看