分类 排序算法 下的文章

排序算法之插入排序

#include <stdio.h>
void insertion_sort(void) {
    int arr[5] = {2,3,4,1,8};
    int i = 0;  
    int j = 0;
    int key = 0;

    for (i = 1; i < 5; i++) {
        key = arr[i];
        j = i - 1; // 循环比较前面j-1个数           

        while (j >= 0 && arr[j] > key) {
            arr[j+1] = arr[j];
            j--;
        }   

        arr[j+1] = key;
    }   

    printf("%d %d %d %d %d",arr[0],arr[1],arr[2],arr[3],arr[4]);
}   

void main(void) {
    insertion_sort();
}  

冒泡排序

#include<stdio.h>
#define LEN 10

// 冒泡排序
void swap(int *arr,int a,int b) {
    int tmp;

    if (arr[a] > arr[b]) {
        tmp = arr[a];
        arr[a] = arr[b];
        arr[b] = tmp;
    }   
    
}

int main(int argc,char *argv[]) {
    
    int i;
    int j = LEN - 1;
    int arr[LEN] = {1,2,-2,-1,3,5,99,7,0,10};
    
    while (j>0) {
        for (i=0;i<j;i++) {
            swap(arr,i,i+1);
        }   
        j--;
    }   
    
    for (i=0;i<LEN;i++) {
        printf("%d\n",arr[i]);
    }   
    
}

快速排序

PHP实现

$arr = [72,6,57,88,60,42,83,73,48,85];

function quickSort(&$arr, $left , $right) {
    if ($left >= $right) {
        return;
    }
    $r     = $right;
    $l     = $left;
    $judge = $left; // 基准数下标
    $index = $judge; // 上一个'位置'索引
    $key   = $arr[$judge];
    while ($l < $r) {
        // 从后往前找, 比基准数小的
        while ($l < $r && $arr[$r] > $key) {
            $r--;
        }
        $arr[$index] = $arr[$r];
        $index = $r;
        // 从前往后找, 比基准数大的
        while ($l < $r && $arr[$l] <= $key) {
            $l++;
        }
        $arr[$index] = $arr[$l];
        $index = $l;
    }
    $arr[$index] = $key;
    // 左区间
    quickSort($arr, $left , $index - 1);
    // 右区间
    quickSort($arr, $index + 1 , $right);
}

quickSort($arr, 0, count($arr) - 1);
printArr($arr);

function printArr(&$arr) {
    foreach ($arr as $li) {
        echo $li . ' ';
    }
    echo PHP_EOL;
}