码迷,mamicode.com
首页 > 编程语言 > 详细

【算法】C语言排序算法整理

时间:2020-04-12 20:59:53      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:插入排序   ati   while   c语言   static   else   min   oid   冒泡排序   

/**
 * 快速排序算法
 */
void quick_sort (int *s, int l, int r) {
    if (l < r) {
        int i = l, j = r, x = s[l];
        while (i < j) {
            while (i < j && s[j] >= x) j--;
            if (i < j) s[i++] = s[j];
            
            while (i < j && s[i] < x) i++;
            if (i < j) s[j--] = s[i];
        }
        s[i] = x;
        quick_sort(s, l, i - 1);
        quick_sort(s, i + 1, r);
    }
}

/**
 * 冒泡排序
 */
void bubble_sort (int *s, int n) {
    int i = 0, j = 0, temp = 0;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - i - 1; j++) {
            if (s[j] > s[j + 1]) {
                temp = s[j];
                s[j] = s[j + 1];
                s[j + 1] = temp;
            }
        }
    }
}

/**
 * 插入排序
 */
void insert_sort (int *s, int n) {
    int i = 0, j = 0, key = 0;
    for (i = 1; i < n; i++) {
        j = i - 1;
        key = s[i];
        while (j >= 0 && s[j] > key) {
            s[j + 1] = s[j];
            j--;
        }
        s[j + 1] = key;
    }
}

/**
 * 选择排序
 */
void section_sort(int *s, int n) {
    int i = 0, j = 0, min = 0, temp = 0;
    for (i = 0; i < n; i++) {
        min = i;
        for (j = i + 1; j < n; j++) {
            if (s[j] < s[min]) {
                min = j;
            }
        }
        if (min != i) {
            temp = s[i];
            s[i] = s[min];
            s[min] = temp;
        }
    }
}

static void merge_array (int *s, int first, int mid, int last, int *temp) {
    int i = first, m = mid;
    int j = mid + 1, n = last;
    int k = 0;

    while (i <= m && j <= n) {
        if (s[i] <= s[j]) temp[k++] = s[i++];
        else temp[k++] = s[j++];
    }

    while (i <= m) temp[k++] = s[i++];
    while (j <= n) temp[k++] = s[j++];

    for (i = 0; i < k; i++)
        s[first + i] = temp[i];
}

/**
 * 归并排序
 */
void merge_sort (int *s, int first, int last, int *temp) {
    if (first < last) {
        int mid = (first + last) / 2;
        merge_sort(s, first, mid, temp);
        merge_sort(s, mid + 1, last, temp);
        merge_array(s, first, mid, last, temp);
    }
}

  

【算法】C语言排序算法整理

标签:插入排序   ati   while   c语言   static   else   min   oid   冒泡排序   

原文地址:https://www.cnblogs.com/hatsusakana/p/12687164.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!