排序算法

来源:互联网 发布:哈希算法原理 ai 编辑:程序博客网 时间:2024/05/09 22:21
 /* sort.c(included kinds of sort algrithms) auther:yejing data:2014/07/23 ver :1.0*/#include <stdlib.h>#include <stdio.h>void swap(int* x, int* y){if(!x || !y)return;*x = *x + *y;*y = *x - *y;*x = *x - *y;return;}int partition(int front, int rear, int array[]){if(front < rear){int j;int i = front - 1;for(j = front; j < rear; j++)if(array[j] < array[rear]){i++;swap(&(array[j]), &(array[i]));}swap(&(array[i + 1]), &(array[rear]));return i + 1;}}void q_sort(int front, int rear, int array[]){if(front < rear){int middle = partition(front, rear, array);q_sort(front, middle - 1, array);q_sort(middle + 1, rear, array);}return;}void merge(int front, int middle, int rear, int array[]){int i = front;int j = middle + 1;int k = 0;int tmp[1024];while(i <= middle && j <= rear)if(array[i] < array[j])tmp[k++] = array[j++];elsetmp[k++] = array[i++];while(i <= middle)tmp[k++] = array[i++];while(j <= rear)tmp[k++] = array[j++];i = 0;for(i; i < k; ++i)array[front + i] = tmp[i];return;}void mergesort(int front , int rear, int array[]){if(front < rear){int middle = (front + rear)/2;mergesort(front, middle, array);mergesort(middle + 1, rear, array);merge(front, middle, rear, array);}return;}void insert_sort(int array[], int n){int i,j;int tmp;for(i = 1; i < n; ++i){tmp = array[i];for(j = i; j > 0 && array[j - 1] < tmp; --j) array[j] = array[j - 1];array[j] = tmp;}}int main(int argc, char* argv[]){int array[19] = {1, 2, 3, 4, 5, 6, 6, 7, 4, 34, 23, 23, 54, 523, 1, 23, 45, 657, 879};printf("please chose the sort algrithm:\n");printf("1-->insert_sort   2-->mergesort   3-->qsort\n");int pattern;scanf("%d", &pattern);if(pattern == 1)insert_sort(array, 19);else if(pattern == 2)mergesort(0, 18, array);else if(pattern == 3)q_sort(0, 18, array);elseprintf("pattern do not support\n");int i;for(i = 0; i < 19; ++i)printf("%d ", array[i]);printf("\n");pause();}

0 0
原创粉丝点击