排序的简单写法

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

原文地址:https://www.cnblogs.com/SallyShan/p/11624402.html