快速排序
思路分析:
1、先从数组里面拿出一个数据(sample),从数组最右边下标(end)开始比较,直到遇到比sample小的数(min)就把min放到sample的位置上
2、接着从数组最左边下标(begin)开始比较,直到遇到比sample大的数(max),就把max放到前面min的原来的位置上
3、一直重复步骤1和2,直到begin下标和end下标相等
4、接着递归分别排序左右两边的数
代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> void quick_sort(int *array,int begin,int end) { if(begin < end) { int i=begin,j=end,x; x = array[begin]; while(i < j) { while( i < j && x <= array[j]) j--; if(i < j) array[i++] = array[j]; while(i < j && x > array[i]) i++; if(i < j) array[j++] = array[i]; } array[i] = x; quick_sort(array,begin,i-1); quick_sort(array,i+1,end); } } int main(int argc,char **argv) { int i = 0; int array[10] = {1,2,8,97,45,56,77,11,6,100}; quick_sort(array,0,9); printf("hello\n"); for(i=0;i<10;i++) { printf("%d ",array[i]); } return 0; }
鉴于本人才疏学浅,所以其中不免有遗漏或者错误,恳请各位博友批评指正。