使用插入排序法求任意数组中任意个数最小值-c语言
仅供一个记录,注释都在源码中
#include "stdafx.h" /** *依赖插入排序法求 *找任意数组中的N个最小值的位置 *array:目标数所在的数组 *arrLen:目标数组的长度 *mins:存放结果的数组 *minLen:想要的最小值个数 * **/ void function(int array[],int arrLen,int mins[],int minLen) { for(int a=0;a<minLen;a++) { mins[a]=-1;//作为还没找到的填充标记 } //第一步:先取想要最小值的个数,作为当前的临时最小数,存起来 bool isChangedFlag=false;//决定当前数是直接放到当前位置,还是插入到前面去 for(int i=0;i<minLen;i++) { isChangedFlag=false; for(int j=0; mins[j]!=-1&&j<minLen;j++) { if(array[i]<array[mins[j]]) { //后面的值依次向后滑动 for(int n=i;n>j;n--) { mins[n]=mins[n-1]; } mins[j]=i; isChangedFlag=true; break; } } if(!isChangedFlag) { mins[i]=i;//将当前数放入到 } } //第二步:从第结果个数的后一个数开始比较 for(int z=(minLen);z<arrLen;z++) { for(int j=0;j<minLen;j++) { if(array[z]<array[mins[j]]) { //后面的值依次向后滑动 for(int n=minLen;n>j;n--) { mins[n]=mins[n-1]; } mins[j]=z; isChangedFlag=true; break; } } } } int main(int argc, char* argv[]) { //使用演示 const int minLen=23;//要的个数 int array[]={1000,450,22,23,67,23,45,32,0,56,78,99,555,432,567,432,1455,2332,34324,4434,34,3434,342};//测试数组 int mins[minLen];//存放结果的数组(值所在的下标) printf("当前的结果表中的值为: "); function(array,sizeof(array)/sizeof(array[0]),mins,minLen); ///* for(int m=0;m<minLen;m++) { printf("位置%d:值%d ",mins[m]+1,array[mins[m]]); } //*/ getchar(); return 0; }
上一篇:
IDEA上Java项目控制台中文乱码