快速排序 和 把一个无序的整形数组分成两部分(以数组第一个数为基准进行划分)

来源:互联网 发布:ctr数据 编辑:程序博客网 时间:2024/04/29 14:13

一: 把一个无序的整形数组分成两部分

     把一个无序的整形数组分成左右两部分:以数组第一个数为基准进行划分,使得左边部分的任意一个数 都小于右边部分的任意一个数,并把基准数插到左边部分的最后一个位置

(或者右边部分的第一个位置)。


二  效果:



三  代码

//数组遍历void PrintArray( int *a , int len){int i = 0;for (i = 0; i < len; i++){printf("%d " , a[i]);}}//快速排序sort(int a[] , int len){ int i = 0, j = 0, tmp = 0 , t= 0 ,count=1;tmp = a[0];for (i = 0+1, j = len - 1; i <j; ){while (a[i]<=tmp){i++;}while (a[j]>=tmp){j--;}if (i < j)//这里一定要加上i小于j{t = a[i];a[i] = a[j];a[j] = t;}printf("\n第%d次交换\n",count);count = count + 1;PrintArray(a, 10);}t = a[j];a[j] = tmp;a[0] = t;}void main(){int a[10] = { 3, 5, 2, 6, 0, 9, 7, 4, 8, 1 };//数组遍历printf("排序前:\n");PrintArray(a , 10);printf("\n");sort(a,10);printf("\n排序后:\n");PrintArray(a,10);getche();}


0 0
原创粉丝点击