找到数组中第几个最小的数据
来源:互联网 发布:淘宝客推广大师手机板 编辑:程序博客网 时间:2024/05/16 14:46
找到数组中第几个最小的数据 将经典的快速排序算法做简单修改即可
示例代码如下:
void testFindSpecificMin(){ int arr[] = {2, 4, 3, 9, 6, 5, 7, 0, 2, 1}; //int arr[] = {4, 2, 9}; //int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int position = 2; findSpecificMin(arr, sizeof(arr)/sizeof(int), position - 1, 0); printf("\n"); for (int i = 0; i < sizeof(arr)/sizeof(int); i++) { printf("arr is %d\n", arr[i]); } printf("min is %d\n", arr[position - 1]); for (int i = 1; i <= sizeof(arr)/sizeof(int); i++) { int position = i; findSpecificMin(arr, sizeof(arr)/sizeof(int), position - 1, 0); printf("min is %d\n", arr[position - 1]); }}/** * currentPivot 当前枢纽元的位置 * specificMin 第几个最小的数 */void findSpecificMin(int arr[], int length, int specificMin, int currentPivot){ if (length <= 1) { return; } if (length == 2) { if (arr[0] > arr[1]) { swap(arr, arr + 1); } return; } int center = (length - 1) / 2; if (arr[0] > arr[length - 1]) { swap(arr, arr + length - 1); } if (arr[0] > arr[center]) { swap(arr, arr + center); } if (arr[center] > arr[length - 1]) { swap(arr + center, arr + length - 1); } swap(arr + center, arr + length - 1); int pivotElement = arr[length - 1]; int leftp = 0; int rightp = length - 1; while (1) { while (arr[--rightp] > pivotElement) { } while (arr[++leftp] < pivotElement) { } if (rightp > leftp) { swap(arr + rightp, arr + leftp); }else{ break; } } swap(arr + leftp, arr + length - 1); printf("\n"); for (int i = 0; i < length; i++) { printf("arr is %d\n", arr[i]); } if (currentPivot + leftp <= specificMin) { findSpecificMin(arr + leftp, length - leftp, specificMin, currentPivot + leftp); }else{ findSpecificMin(arr, leftp, specificMin, currentPivot); }}
阅读全文
0 0
- 找到数组中第几个最小的数据
- 找到数组中最小的K个数
- 在一个无序数组中找到第K个最小或者最大的元素
- 找到数组中最小的数以及位置
- 找到数组中未出现的最小整数
- 找到无序数组中最小的K个数
- 在JavaScript数组中找到最小元素的位置
- 无序数组中找到一个局部最小的位置
- 无序数组中找到第K小的数(或者找到最小的K个数)
- 快速找到数组总最小的数
- 数组与矩阵---找到无序数组中最小的k个数
- 数组与矩阵---在数组中找到一个局部最小的位置
- 在N个不同元素的数组A中,同时找到它的最大元素和最小元素,设A中的元素可以直接比较大小
- SQL 语句如何找到表中第几到第几行数
- 在一个非递减数组中找到绝对值最小的数字
- 【极难】【BFPRT算法】找到无序数组中最小的K个数
- 41. First Missing Positive(找到数组中未出现的最小正整数)
- 找到一个32位数的第一个0是第几位
- 解决adb install 错误INSTALL_FAILED_UPDATE_INCOMPATIBLE
- (EM算法)The EM Algorithm
- iOS开发-获取设备唯一标识符(UUID)
- Android实习札记(6)---ViewPager使用详解
- MyEclipse&Maven项目管理教程:如何创建Maven项目
- 找到数组中第几个最小的数据
- oracle中函数和存储过程的区别和联系
- mysql常用命令
- C#中var、int、object性能比较
- linux 网络
- Libvirt之event loop(一)
- java request.getHeader("user-agent")获取浏览器信息
- MyEclipse&Maven项目管理教程:设置Maven启动配置
- 详解PHP实现定时任务的五种方法