zoukankan      html  css  js  c++  java
  • 排序算法

     1、选择排序

    重复的循环,每次选出最小的数。

    for(int i=0; i<v.size()-1; i++){
                    int min = v[i]; 
                    int temp;
                    int index = i;
                    for(int j=i+1;j<v.size();j++){
                        if(v[j] < min){ 
                            min = v[j]; 
                            index = j;
                        }       
                    }       
            
                    temp = v[i]; 
                    v[i] =  v[index];
                    v[index]= temp;
            }

    2、冒泡排序

    冒泡排序是对选择排序的一种改进,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

    #include <stdio.h>
    void bubble_sort(int a[], int n)
    {
        int i, j, temp;
        for (j = 0; j < n - 1; j++)
            for (i = 0; i < n - 1 - j; i++)
            {
                if(a[i] > a[i + 1])
                {
                    temp = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = temp;
                }
            }
    }
    

      3、快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进。

    一趟快速排序的算法是:
    1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
    2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
    3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
    4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
    5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
    1.
    j先开始向左移动,当遇到比key(初始值为数组的第一个值6)小的数5停下来,将此时的5赋值给数组第一个数,此时的数组变成5 1 2 7 9 3 4 5 10 8。key值不变为6.
    2.
    然后i从左侧开始移动寻找比key值大的数,遇到7时停止。此时将7赋值给j所在的位置,此时数组变成5 1 2 7 9 3 4 7 10 8。接着把key值赋值给此时7所在的位置。这样数组的值现在变为5 1 2 6 9 3 4 7 10 8。
    3.
    接着数组被分割成两部分,以key为界限,分别递归调用即可。
    代码如下:
     
    #include <iostream>
     
    using namespace std;
     
    void Qsort(int a[], int low, int high)
    {
        if(low >= high)
        {
            return;
        }
        int first = low;
        int last = high;
        int key = a[first];/*用字表的第一个记录作为枢轴*/
     
        while(first < last)
        {
            while(first < last && a[last] >= key)
            {
                --last;
            }
     
            a[first] = a[last];/*将比第一个小的移到低端*/
     
            while(first < last && a[first] <= key)
            {
                ++first;
            }
             
            a[last] = a[first];    
    /*将比第一个大的移到高端*/
        }
        a[first] = key;/*枢轴记录到位*/
        Qsort(a, low, first-1);
        Qsort(a, first+1, high);
    }
    int main()
    {
        int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
     
        Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);/*这里原文第三个参数要减1否则内存越界*/
     
        for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
        {
            cout << a[i] << "";
        }
         
        return 0;
  • 相关阅读:
    vue-以文件流-blob-的形式-下载-导出文件
    vue-element-upload 文件上传打开选择文件弹框前进行提示或操作
    django-创建Template(模板)
    django-配置url
    django-创建页面
    django创建应用及应用模块解释
    django创建项目及目录介绍
    django的安装
    Python2X学习16-python-列表
    Request
  • 原文地址:https://www.cnblogs.com/K2154952/p/4779187.html
Copyright © 2011-2022 走看看