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

简单的排序算法实现

时间:2017-06-30 22:35:41      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:算法

#include <stdio.h>#include<stdlib.h>void insertSortForward(int orig[], int size);void insertSortBackward(int orig[], int size);void bubbleSort(int orig[], int size);void selectSort(int orig[], int size);void shellSort(int orig[], int size);void HeapSort(int orig[], int size);void QuickSort(int[], int, int);void swap(int *, int *);int Partition(int orig[], int left, int right);void BuildHeap(int orig[],int size);void HeapAdjust(int[], int, int);int main() {    int a[] = { 1,3,2,4,5,7,0,8,8 };    //bubbleSort(a, 7);    //insertSortForward(a, 8);    //insertSortBackward(a, 8);    //selectSort(a, 8);    //shellSort(a, 8);    //HeapSort(a, 9);    QuickSort(a, 0, sizeof(a)/sizeof(a[0])-1);    for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)        printf("%d ", a[i]);    printf("\n");    system("pause");    return 0; }void shellSort(int orig [], int size) //Shell排序{    int i, j, k, t;    k = (size / 2) % 2 == 0 ? size / 2 + 1 : size / 2;    while (k > 0)    {        for (int j = k; j < size; j++) {            t = orig[j];            i = j - k;            while (i >= 0 && t < orig[i]) {                orig[i+k] = orig[i];                orig[i] = t;                i = i - k;            }        }        k /= 2;        if (k==0)        {            break;        }    }    for (int i = 0; i < size; i++)        printf("%d ", orig[i]);    printf("\n");         }void HeapSort(int orig[], int size){    BuildHeap(orig, size);    for (int i = 0; i < size; i++)        printf("%d ", orig[i]);    printf("\n");    while(size > 0)    {        printf("%d ", orig[0]);        orig[0] = orig[ --size];        HeapAdjust(orig, 0,size);    } }void QuickSort(int orig[], int left, int right){    if (left < right) {        int point = Partition(orig, left, right);        QuickSort(orig, left, point - 1);        QuickSort(orig, point + 1, right);    } }void swap(int *a, int*b) {    int temp;    temp = *a;    *a = *b;    *b = temp; }int Partition(int orig[], int left, int right){    int prikey = orig[right];    while (left<right)    {        while (left<right&&prikey >= orig[left]) left++;        swap(&orig[left], &orig[right]);        while (left<right&& prikey <= orig[right]) right--;        swap(&orig[left], &orig[right]);    }    return left; }void BuildHeap(int orig[], int size){    int k;    for (k=size/2-1; k>=0; k--)    {        HeapAdjust(orig, k, size);    }     }void HeapAdjust(int orig[], int adjustPort, int size) {        int min;   //记录左右节点中最小的    int nextPoint; // 下一步    while (adjustPort*2+1<size-1) // 还有孩子    {          int leftChild = adjustPort * 2+1;        int rightChild = adjustPort * 2 + 2;        min = orig[leftChild];        nextPoint = leftChild;        if (rightChild<=size-1&&orig[rightChild]<orig[leftChild])        {            min = orig[rightChild];            nextPoint = rightChild;        }        if (orig[adjustPort]>min)        {            orig[nextPoint] = orig[adjustPort];            orig[adjustPort] = min;            adjustPort = nextPoint;        }        else        {            break;        }    } }void insertSortForward(int orig[], int size){    int i, j;    for (i = 1; i < size; i++) {        int temp = orig[i];        int index = i;        j = i - 1;        while (j >= 0 && orig[j] > temp)        {            orig[index] = orig[j];            index = j;            j--;        }        orig[j + 1] = temp;    }    for (int i = 0; i < size; i++)        printf("%d ", orig[i]);    printf("\n"); }void insertSortBackward(int orig[], int size) // 从后往前{    int i, j;    int left, right;    for (i = 1; i < size; i++) {        for (j = 0; j < i; j++) {            if (orig[i] <= orig[j])            {                left = orig[i];                right = i;                while (i - j)                {                    orig[i] = orig[i - 1];                    i--;                }                i = right;                orig[j] = left;            }        }            }    for (int i = 0; i < size; i++)        printf("%d ", orig[i]);    printf("\n"); }void bubbleSort(int orig[], int size) {    int i = 0;    int j = 0;    for (i = 0; i < size; i++) {        for (j = 0; j < size - i; j++) {            if (orig[j] > orig[j + 1]) {                int temp = 0;                temp = orig[j];                orig[j] = orig[j + 1];                orig[j + 1] = temp;            }        }    }    for (int i = 0; i < size; i++)        printf("%d ", orig[i]);    printf("\n"); }void selectSort(int orig[], int size){    for (int i = 0; i < size; i++) {        int min = orig[i];        int index = i;        for (int j = i+1; j < size; j++)        {            if (min > orig[j]) {                min = orig[j];                index = j;            }        }        orig[index] = orig[i];        orig[i] = min;    }    for (int i = 0; i < size; i++)        printf("%d ", orig[i]);    printf("\n"); }

简单的排序算法实现

标签:算法

原文地址:http://13064681.blog.51cto.com/13054681/1943442

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