假设知道最大值和最小值范围。 首先取center = (max + min) / 2 然后 > center的放入一边, < center 的放入一边。 统计两边的个数,然后修改max和min,重新做。 像你说的,如果固定的100万,可以把center 设置为靠近100万的值。
by broadoceans - C/C++ - 2006-12-18 13:18:25 阅读(929) 回复(0)
[code]
def QuickSort(ls):
return [] if ls ==[] else QuickSort([x for x in ls[1:] if x
[root@mip-123456 quick_sort]# cat quick.c #include stdio.h> #define N 10 inline int exchange(int* a,int* b) { int tmp; tmp = *a; *a = *b; *b = tmp; return 0; } int partition(int* A,int p ,int r) { int tmp = 0; int i = 0; int j = 0; tmp = *(A+r); //printf("tmp is %d\n",tmp); i = p-1; for(j=p;jr;j++) { // printf("A[%d] is %d\n",j,*(A+j)); if(A[j]tmp) ...
书上说快速排序是对起泡排序的一种改进,个人感觉他俩没啥关系呢?求高人指点! 冒泡排序的思想较简单: S1:从待排序序列的起始位置开始,从前往后依次比较各个位置和其后一位置的值得大小并执行S2。 S2:如果当前位置的值大于其后需位置的值,就把他俩的值交换。 //完成此次全序列比较后,序列最后位置的值即此序列最大值,所以其不需要在参与冒泡。 S4:将序列的最后一个位置从待冒泡的序列中移除。如果移除后待排序序列不为空则执...
递归函数quicksort里面没有判断左右范围大小,导致无穷递归,纠结了半天。闲来没事,写简单的数据结构,学学编程。[code]#include
Java快速排序
Java代码[code]1.public class SortTest {
2. public static int[] a = {3,6,87,22,93,112,2,54,39,44};
3.
4. public static void qsort(int[] a,int i,int j) {
5. if(i
快速排序 思想 快速排序算法 例 确定1个数值 大的在后面 小的那前面 在以数值为中心分割 前后2个数组分别做快速排序~如此递归! 下面是1个demo 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对...
算法导论上7.4.1小节说 PARTITION 产生两个子问题,总的大小为n-1. 为什么是n-1呢? 不是每次PARTITION都可以确定一个元素在数组中的位置吗,那么传给PARTITION的数组的元素个数应该越来越少呀,怎么会总是n-1呢? 谁能帮帮我吗?谢谢!
public class QuickSort1 { void QuickSort(String[] pData, int left, int right) { int i, j; // int iTemp; String middle, strTemp; i = left; j = right; middle = pData[(left + right) / 2]; do { while ((pData.compareTo(middle) 0) && (j > left)){ j--; } if (i // iTemp = pDataNum; // pDataNum = pDataNum[j]; // pDataNum[j] = iTemp; i++; j--; } } while...