zoukankan      html  css  js  c++  java
  • 排序的简单写法

    1.快速排序

    1. 算法描述

    快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用。快速排序是一种既不浪费空间又可以快一点的排序算法。

    2. 算法步骤

    • 先从数列中取出一个数作为“基准”。
    • 分区过程:将比这个“基准”大的数全放到“基准”的右边,小于或等于“基准”的数全放到“基准”的左边。
    • 再对左右区间重复第二步,直到各区间只有一个数。

    3. 算法实现(C语言)

    #include <stdio.h>
    #include <stdlib.h>
    void sort(int a[],int n)
    {
        int i,j,t;
        for(j=0; j<n; j++)
            for(i=0; i<n-1-j; i++)
                if(a[i]>a[i+1])
                {
                    t=a[i];
                    a[i]=a[i+1];
                    a[i+1]=t;
                }
    }
    int main()
    {
        /*int a[]= {3,9,2,1,4,5,6};
        int i;
        sort(a,7);
        for(i=0; i<7; i++)
        {
            printf("%d ",a[i]);
        }*/
        int a[10010];
        int i,n;
        printf("输入一个整数:
    ");
        scanf("%d", &n);
        printf("输入待排序的数组:
    ");
        for(i=0; i<n; i++)
        {
          scanf("%d",&a[i]);
        }
        printf("
    ");
        sort(a,n);
        printf("排序后的数组:
    ");
        for(i=0; i<n; i++)
        {
          if(i==0)
              printf("%d",a[i]);
          else
              printf(" %d",a[i]);
        }
        printf("
    ");
    
    }
    void quicksort(int *a,int low,int high)
    {
        int i=low, j=high;
        if(i<j)
        return;
    
        int temp=a[low];
        while(i<j)
        {
            while(a[j]>=temp&&i<j)
            j--;
            a[i]=a[j];
            while(a[i]<=temp&&i<j)
            i++;
            a[j]=a[i];
        }
        a[i]=temp;
    
        quicksprt(a,low,i-1);
        quicksort(a,i+1,high);
    }

    2.Javascript算法

    var quickSort = function(arr) {
        if (arr.length <= 1) { return arr; }
        var pivotIndex = Math.floor(arr.length / 2);   //基准位置(理论上可任意选取)
        var pivot = arr.splice(pivotIndex, 1)[0];  //基准数
        var left = [];
        var right = [];
        for (var i = 0; i < arr.length; i++){
            if (arr[i] < pivot) {
                left.push(arr[i]);
            } else {
                right.push(arr[i]);
            }
        }
        return quickSort(left).concat([pivot], quickSort(right));  //链接左数组、基准数构成的数组、右数组
    };

    选择排序 https://segmentfault.com/a/1190000009366805

    希尔排序 https://segmentfault.com/a/1190000009461832

  • 相关阅读:
    POJ2524+并查集
    POJ3697+BFS+hash存边
    POJ1151+线段树+扫描线
    POJ2528+线段树
    ubuntu 和 win7 远程登陆 + vnc登陆
    POJ3690+位运算
    POJ3283+字典树
    POJ3282+模拟
    POJ2349+prim
    2016.6.13
  • 原文地址:https://www.cnblogs.com/SallyShan/p/11624402.html
Copyright © 2011-2022 走看看