快速排序 和 把一个无序的整形数组分成两部分(以数组第一个数为基准进行划分)
2017-02-24 11:55
543 查看
一: 把一个无序的整形数组分成两部分
把一个无序的整形数组分成左右两部分:以数组第一个数为基准进行划分,使得左边部分的任意一个数 都小于右边部分的任意一个数,并把基准数插到左边部分的最后一个位置
(或者右边部分的第一个位置)。
二 效果:
三 代码
把一个无序的整形数组分成左右两部分:以数组第一个数为基准进行划分,使得左边部分的任意一个数 都小于右边部分的任意一个数,并把基准数插到左边部分的最后一个位置
(或者右边部分的第一个位置)。
二 效果:
三 代码
//数组遍历 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(); }
相关文章推荐
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序(创新工场)
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序(创新工场)
- 百度笔试题:一个已经排序好的很大的数组,现在给它划分成m段,每段长度不定,段长最长为k,然后段内打乱顺序,请设计一个算法对其进行重新排序
- 实现一个排序算法,对0~n-1范围内的n个不重复的无序数组进行排序,时间复杂度为O(n),空间复杂度为O(1)。
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。
- 一道面试题:对一个数组进行排序,要求第一个最大、第二
- C语言:用插入排序算法对一个数组进行排序
- java中合并无序数组并进行排序
- java快速排序1000万无序数组JVM-Xmx=256M 耗时2s
- 编程产生一个int数组,长度为30,并向其中随机插入1-30,并且不能重复输出数组。实现一个冒泡排序算法对其进行排序,输出排序结果
- 两个数组 [n] [m] n>m 第一个数组的数字无序排列 第二个数组为空 取出第一个数组的最小值 放到第二个数组中第一个位置, 依次类推. 不能改变A数组,不能对之进行排序,也不可以倒到别的数组中。
- 消除原理____假设数组中有一个数字出现的次数超过了数组长度的一半,试编程找出这个数字(qosrt 快速排序 哈希)
- 输入一个数组,对数组进行排序,并输出该数组中重复元素出现的次数
- 一道面试题,对一个数组进行排序,第一个最大,第二个最小,第三个次大,一次类推
- 使用JavaScript完成一个对字符串数组进行排序的小程序
- 以字符串中出现次数最多的字符的个数为权值,对一个字符串数组进行升序排序
- C语言:用快速排序算法对一个数组进行排序
- 使用随机函数初始化一个数组,并对数组进行排序(冒泡排序法和选择排序法)
- 面试题:在O(1)空间复杂度范围内对一个数组中前后连段有序数组进行归并排序
- java快速排序1000万无序数组JVM-Xmx=256M 耗时2s