//1.编写程序,在O(n)时间内从数组x[0...n-1]中找出第K个最小的元素。算法可以对x中的元素进行排序 int bigrand( ) { return RAND_MAX*rand() +rand(); } int randint(int l,int u) { return 1+bigrand() %(u-l+1); } void select(int left, int right ,int x[],int k) { if ( left >= right) return; int random=randint(left,right); swap( left, random ); int t =x[left], i =left, j=right+1; int temp; while(true) { do { i++; }while( i <= right && x[i] <t ); do { j--; }while(x[j] > t); if (i >j ) break; temp =x[i]; x[i] = x[j]; x[j] =temp; } swap(left,j); if ( j < k) select( j+1, right,x, k); else if (j > k) select(left, j, x, k); } //2.编写程序求出子数组中最大的和 int MaxSum(int x[ ], int length) { int maxAll =0; int maxCurrent =0; for (int i=0; i < length; i++) { maxCurrent = max( maxCurrent+ x[i], 0); maxAll = max(maxAll, maxCurrent); } return maxAll; }
数组中选第k个最小的数和子数组的最大和
最新推荐文章于 2022-08-28 14:56:13 发布