排序

来源:互联网 发布:深圳缇嘉服饰淘宝店铺 编辑:程序博客网 时间:2024/06/06 02:46

直接插入排序:

#include<stdio.h>#include<stdlib.h>void insertSort(int *array, int n){    int i = 0, j = 0;    for (i = 1; i < n; i++)    {        int tmp = array[i];//tmp保存待排序的数        for (j = i - 1; j >= 0; j--)        {            if (tmp < array[j])            {                array[j + 1] = array[j];//大数后移                array[j] = tmp;            }            else                break;        }    }}int main(){    int n = 0;    printf("直接插入排序:\n输入数组的大小:\n");    scanf_s("%d", &n);    int *array = (int*)malloc((n + 1) * sizeof(int));    int i = 0;    printf("依次输入这%d个数:\n", n);    for (i = 0; i < n; i++)    {        scanf_s("%d", &array[i]);    }    insertSort(array, n);    printf("排序结果:\n");    for (i = 0; i < n; i++)    {        printf("%d ", array[i]);    }    printf("\n");}

改进版:

#include<stdio.h>#include<stdlib.h>//怎么感觉跟冒泡一样?void insertSort(int *array, int low, int high){    int i = low;    while (i <= high) {        int j;        for (j = i; j >= low;j--)        {            if (array[j] < array[j - 1])            {                int tmp = array[j];                array[j] = array[j - 1];                array[j - 1] = tmp;            }        }        i++;    }}int main(){    int i;    int n;    int *array;    printf("请输入数组的大小:");    scanf_s("%d", &n);    array = (int*)malloc(sizeof(int) * (n + 1));    printf("请输入数据(用空格分隔):");    for (i = 0; i < n; i++)    {        scanf_s("%d", &array[i]);    }    insertSort(array, 0, n - 1);    printf("排序后为:");    for (i = 0; i < n; i++)    {        printf("%d ", array[i]);    }    printf("\n");}

冒泡排序:

#include<stdio.h>#include<stdlib.h>void bubbleSort(int *array, int n){    int i, j;    for (i = 0; i < n - 1; i++)    {        for (j = 0; j < n - i - 1; j++)        {            if (array[j] > array[j + 1])            {                int tmp = array[j];                array[j] = array[j + 1];                array[j + 1] = tmp;            }        }    }}int main(){    int n = 0;    printf("冒泡排序:\n输入数组的大小:\n");    scanf_s("%d", &n);    int *array = (int*)malloc((n + 1) * sizeof(int));    int i = 0;    printf("依次输入这%d个数:\n", n);    for (i = 0; i < n; i++)    {        scanf_s("%d", &array[i]);    }    bubbleSort(array, n);    printf("排序结果:\n");    for (i = 0; i < n; i++)    {        printf("%d ", array[i]);    }    printf("\n");}

快排:

挖坑填数+分治法:

#include<stdio.h>#include<stdlib.h>void QuickSort(int *array, int low, int high){    if (low < high)    {        int L = low;        int R = high;        int pivotkey = array[low];        while (low < high && array[high] >= pivotkey)        {            high--;        }        array[low] = array[high];        while (low < high&&array[low] <= pivotkey)        {            low++;        }        array[high] = array[low];        array[low] = pivotkey;        QuickSort(array, L, low - 1);        QuickSort(array, low + 1, R);    }}int main(){    int i;    int n;    int *array;    printf("请输入数组的大小:");    scanf_s("%d", &n);    array = (int*)malloc(sizeof(int) * (n + 1));    printf("请输入数据(用空格分隔):");    for (i = 0; i < n; i++)    {        scanf_s("%d", &array[i]);    }    QuickSort(array, 0, n - 1);    printf("排序后为:");    for (i = 0; i < n; i++)    {        printf("%d ", array[i]);    }    printf("\n");}

参考:白话经典算法系列之六 快速排序 快速搞定


选择排序:

  1. 简单选择排序:
#include<stdio.h>#include<stdlib.h>void selectSort(int *array, int low, int high){    int i = low;    while (i <= high)    {        int j;        for (j = i; j <= high; j++)        {            if (array[j] < array[i]) {                int tmp = array[i];                array[i] = array[j];                array[j] = tmp;            }        }        i++;    }}int main(){    int i;    int n;    int *array;    printf("请输入数组的大小:");    scanf_s("%d", &n);    array = (int*)malloc(sizeof(int) * (n + 1));    printf("请输入数据(用空格分隔):");    for (i = 0; i < n; i++)    {        scanf_s("%d", &array[i]);    }    selectSort(array, 0, n - 1);    printf("排序后为:");    for (i = 0; i < n; i++)    {        printf("%d ", array[i]);    }    printf("\n");}
  1. 堆排序:
//TODO

归并排序:

//Todo
0 0
原创粉丝点击