两种快速排序的实现(C语言)
2017-11-22 19:59
337 查看
两种搜索方式不一样,第 0种单向搜索,第1 种双向搜。
代码如下:
#include <stdio.h> #include <stdlib.h> #include <time.h> #define MAXVAL 8 #define STATIC 0 void display(); int a[MAXVAL] = {8,2,1,3,4,5,6,9}; int quick1(int a[], int sta, int end) { int i, j; int tmp = a[sta],temp; i = sta + 1; j = end; do { while(i <= j){if(a[i] >= a[sta]) break; i++;} if(i >= end) { temp = a[i - 1]; a[i - 1] = a[sta]; a[sta] = temp; return i - 2; } while(i < j){if(a[j] < a[sta]) break; j--;} if(i < j) { temp = a[j]; a[j] = a[i]; a[i] = temp; } if( i == j) { temp = a[i-1]; a[i-1] = a[sta]; a[sta] = temp; return i-1; } }while(1); return -1;//avoid warning,not used. } void quicksort1(int a[],int sta,int end) { int mid; int temp; if(sta >= end) { return; } if(end - sta == 1) { if(a[sta] > a[end]) { temp = a[sta]; a[sta] = a[end]; a[end] = temp; } return ; } mid = quick1(a,sta,end); quicksort1(a,sta,mid); quicksort1(a,mid+1,end); } int quick0(int a[], int sta, int end) { int i,j; int tmp = a[sta],temp; for(i = j = sta+1; i < end; i++) { if(a[i] <= tmp) { temp = a[j]; a[j] = a[i]; a[i] = temp; j++; } } temp = a[j-1]; a[j-1] = a[sta]; a[sta] = temp; return j-1; } void quicksort0(int a[],int sta,int end) { int mid; if(sta >= end) { return; } display(); mid = quick0(a,sta,end); quicksort0(a,sta,mid); quicksort0(a,mid+1,end); } void display() { int i = 0, j = 0; for(i = 0; i < MAXVAL; i++) { j += printf("%d ",a[i]); if(j >= 50) { j = 0; printf("\n"); } } printf("\n"); } bool verify(int a[]) { int i; for(i = 1; i < MAXVAL; i++) { if(a[i-1] > a[i]) return false; } return true; } int main() { int i = 0,j = 100; srand(time(NULL)); #if STATIC == 0 for(i = 0; i < MAXVAL; i++) { a[i] = rand() %20;//random some data } #endif quicksort1(a,0,MAXVAL-1);// or quicksort0(a,0,MAXVAL); if(!verify(a)) { printf("error \n"); display(); } return 0; }
相关文章推荐
- 两种实现数据结构中的栈(C语言)
- c语言实现快速排序
- C语言实现快速排序
- c语言:两种方法实现字符串拷贝strcpy
- C语言两种方法实现进程间 socket 通信
- C语言实现快速排序
- Linux平台上C语言实现异步队列的两种方法
- [算法]两种字符串匹配算法(索引法,KMP算法)对比,C语言实现
- C语言实现冒泡、插入、选择、快速排序
- c语言实现快速排序
- 快速排序(c语言实现)
- (排序)用C语言实现的快速排序(交换排序)
- n皇后问题的两种递归方法C语言实现
- C语言实现快速排序
- 排序【6】之快速排序的C语言实现
- c语言:实现对于给定的正整数N,依次打印出小于等于N的所有素数。两种方法及其优化
- 读《算法导论》我来C语言实现(4)——快速排序
- [笔记]一道C语言面试题:实现快速排序
- C语言实现的快速排序,采用分治策略,递归实现
- 快速排序的实现两种实现