快速排序

来源:互联网 发布:with php config 编辑:程序博客网 时间:2024/06/06 10:01

很经典的一个算法:

下面内容摘自百度百科:

一趟快速排序的算法是:

1)设置两个变量ij排序开始的时候:i=0j=N-1

2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0]

3)从j开始向前搜索,即由后开始向前搜索(j -- ),找到第一个小于key的值A[j]A[i]A[j]交换;

4)从i开始向后搜索,即由前开始向后搜索(i ++ ),找到第一个大于key的A[i]A[i]A[j]交换;

5)重复第345步,直到 I=J; (3,4步是在程序中没找到时候j=j-1i=i+1,直至找到为止。找到并交换的时候i, j指针位置不变。另外当i=j这过程一定正好是i+j-完成的最后令循环结束。


测试代码:

#include <stdio.h>void swap(int *array,int a,int b){int tmp=array[a];array[a]=array[b];array[b]=tmp;}void FastSort(int* array,int i,int j){if(i>=j)return ;int start=i,end=j;int tmp;int key_pos=i;while(i<j){while(i<=j && array[j]>=array[key_pos]) j--;if(i>j)break;swap(array,j,key_pos);key_pos=j;j--;while(i<=j && array[i]<array[key_pos]) i++;if(i>j)break;swap(array,i,key_pos);key_pos=i;i++;}FastSort(array,start,key_pos-1);FastSort(array,key_pos+1,end);}void print_array(int *array,int len){int i=0;for(i=0;i<len;i++){printf("%d ",array[i]);}printf("\n");}int main(int argc,char* argv[]){int a[]={45,11,32,87,23,99,52,14,1};printf("before sort:");print_array(a,9);FastSort(a,0,8);printf("after sort:");print_array(a,9);return 0;}

原创粉丝点击