利用快速排序的方法进行:

#include<iostream>
using namespace std;
int test()
{
int a = ;
return a;
} int quickSort(int* inputArray, const int left, const int right, int bigCount, int &result)
{
cout << endl;
cout << "right is: " << right << endl;
cout << "left is: " << left << endl;
if(left > right)
{
cout << "return -1~~~" << endl;
result = -;
return -;
}
//在某一次递归中,如果传入的左右两边相等,且要找第一大的数,那么就返回该值即可
if(left == right && bigCount == )
{
int tmp = inputArray[right];
cout << "inputArray[right] is: " << tmp << endl;
result = tmp;
return tmp;
}
int maxNum = ;
int i = left;
int j = right + ;//因为下面有个j--,为了能直接用,将这里的j加1,因此输入数组最后需要填充一个数 int pivot = inputArray[left];
//这里的循环进行一次遍历,在遍历的过程中,将左边大于pivot的元素以及右边小于pivot的元素进行交换,一次遍历之后,i与j相遇,此时再将pivot与j相互交换
//那么,此时处在pivot的左边的数都是小于pivot的,pivot处在右边的数都是大于pivot的
//这时候假设左边有m个数,右边有n个数,那么pivot就是第m+1小的数,倒数第n+1大的数
//假设要求第k大的数,只需要右边的个数为k-1即可
do
{
do i++; while(inputArray[i] < pivot);
do j--; while(inputArray[j] > pivot);
if(i < j)
swap(inputArray[i], inputArray[j]);
}
while(i < j);
swap(inputArray[j], inputArray[left]);
cout << endl << "================after one swap==================" << endl;
for(int i = ; i < ; i++)
{
cout << inputArray[i] << " ";
}
cout << endl;
int len = right - j + ;
cout << "j is: " << j << endl;
cout << "bigCount is: " << bigCount << endl;
cout << "len is: " << len << endl;
if(len < bigCount)//需要在左边继续寻找
{
int tmp = quickSort(inputArray ,left, j - , bigCount - len, result);
if(tmp != -)
return tmp;
}
else if(len > bigCount) //需要在右边继续寻找
{
int tmp = quickSort(inputArray, j + , right, bigCount, result);
if(tmp != -)
return tmp;
}
else
{
int tmp = inputArray[j];
cout << "inputArray[j] is: " << tmp << endl;
result = tmp;
return tmp;
}
}
int main()
{
int a[] = {, , , , , , , , , , };
cout << endl << "================origion==================" << endl;
for(int i = ; i < ; i++)
{
cout << a[i] << " ";
}
int rrrr = ;
int result = ;
cout<<endl;
result = quickSort(a, , , , rrrr);
cout<<endl<<endl;
cout << "rrrr is " << rrrr << endl;
cout << "result is " << result << endl;
cout<<endl<<endl;
cout << endl << "================result==================" << endl;
for(int i = ; i < ; i++)
{
cout << a[i] << " ";
}
return ;
}

最新文章

  1. Nand Flash,Nor Flash,CFI Flash,SPI Flash 之间的关系
  2. 随笔 JS 字符串 分割成字符串数组 并动态添加到指定ID的DOM 里
  3. Hibernate不能自动建数据表解决办法
  4. python开发学习-day01 (python安装与版本、字符串、字典、运算符、文件)
  5. android.content.Context 含义及使用
  6. ubuntu设置系统时间与网络时间同步和时区
  7. MySQL-python 1.2.3 for Windows and Python 2.7, 32bit and 64bit versions -(亲测可用)
  8. objective-c 关键字和概念
  9. 找回XP中的搜索助理
  10. magento1.x 运行在 php7 优惠券的问题
  11. Python爬虫 Urllib库的高级用法
  12. eclipse 安装svn和gradle
  13. Could not load file or assembly &#39;System.ValueTuple&#39;
  14. SUSE11sp3 perf工具安装过程
  15. tomcat部署应用时设置context path为空的上下文路径问题
  16. Mac使用Shell(终端)SSH连接远程服务器
  17. ichartjs一分钟快速入门教程
  18. windows 找不到文件&#39;igfxHK.exe&#39;
  19. JAVA 导出 Excel, 将Excel下载到本地
  20. Python初学者第十三天 三级菜单程序小作业

热门文章

  1. Linux下批量ping某个网段的脚本
  2. CDH 更换 HDFS 数据目录
  3. IDEA 好用的插件
  4. embeddable persistent key-value store for fast storage
  5. vue常用的修饰符
  6. SQL-W3School-高级:SQL FOREIGN KEY 约束
  7. SD卡状态监听(无序广播)
  8. C++ STL 逆转旋转 reverse reverse_copy rotate
  9. 记录一次SignalR服务端实现过程
  10. 最新 网宿科技java校招面经 (含整理过的面试题大全)