数据结构算法-排序算法之交换排序-快速排序

来源:互联网 发布:linux yum配置本地源 编辑:程序博客网 时间:2024/05/21 06:20

快速排序:

1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

#include <stdio.h>void QuickSort(int k[], int n){int i=0, j = n-1, point;point = k[0];while(i < j){for (; j>i; j--){if (point > k[j]){k[i] = k[j];i++;break;}}for (; i<j; i++){if (k[i] > point){k[j--] = k[i];break;}}k[i] = point;QuickSort(k,i);QuickSort(k+i+1,n-i-1);}}/*void QuickSort(int a[], int numsize){int i = 0, j = numsize-1;int val = a[0];if (numsize > 1){while (i<j){for (; j>i; j--){if (a[j] < val){a[i++] = a[j];break;}}for (; j>i; i++){if (a[i] > val){a[j--] = a[i];break;}}a[i] = val;QuickSort(a,i);QuickSort(a+i+1, numsize-i-1);}}}*/int main(){int i;int a[10]={5,2,6,0,3,9,1,7,4,8};QuickSort(a,10);printf("The result of sort is: ");for( i=0; i<10; i++){printf("%d", a[i]);}printf("\n");return 0;}


0 0
原创粉丝点击