C/C++ 排序&&查找算法(面试)
一、排序
1.冒泡排序
void BubbleSort(int array[],int n)
{
int i=;
int j=;
int temp=;
int flag = ;
for(i=;i<n - ;i++) /*外循环控制排序的总趟数*/
{
flag = ; /*本趟排序开始前,交换标志应为假*/
for(j=n-;j > i;j--) /*内循环控制一趟排序的进行*/
{
if(array[j] < array[j-] ) /*相邻元素进行比较,若逆序就交换*/
{
temp =array[j];
array[j] = array[j-];
array[j-] = temp;
flag = ; /*发生了交换,故将交换标志置为真*/
} }
if (flag == ) /*本趟排序未发生交换,提前终止算法*/
break;
}
}
冒泡排序--递归实现
void SortByRecursion( int *array, int n )
{
int i;
if( == n)
{
return;
}
for(i = ; i < n - ; i++)
{
if(array[i] > array[i + ])
swap( &array[i], &array[i + ]);
}
SortByRecursion( array, n - );
}
2.插入排序
//插入排序(非递归)
void InsertSort(int *pArr, int nLength)
{
if (pArr == NULL || nLength <= )
{
return;
} int key = ;
int j=;
for (int i=; i<nLength; i++)
{
if (pArr[i] < pArr[i-])//当前带插入的元素比有序序列的最后一个元素小
{
key = pArr[i];
for (j=i-; j>=&&key<pArr[j]; j--)
{
pArr[j+] = pArr[j];
}
pArr[j+] = key;
}
}
}
插入排序---递归实现
//插入排序(递归)
void InsertSortRecursively(int *pArr, int index, int nLength)
{
if (index >= nLength)
{
return;
} int key = pArr[index];//记录当前待插入的元素
int i=;
for (i=index-; i>=&&key<pArr[i]; i--)
{
pArr[i+] = pArr[i];
}
pArr[i+] = key;
InsertSortRecursively(pArr, index+, nLength);
}
3.快速排序
int PartSort(int arr[],int low, int high)
{
int key = arr[low];
while(low < high)
{
while(low < high && arr[high] >= key)
--high;
arr[low] = arr[high];
while(low < high && arr[low] <= key)
++low;
arr[high] = arr[low];
}
arr[low] = key;
return low;
}
void QuickSort(int arr[],int low, int high)
{
if(low < high)
{
int pos = PartSort(arr, low, high);
QuickSort(arr, pos+, high);
QuickSort(arr, low, pos-);
}
}
二、查找
1.折半查找
int HalfFind(int arr[], int count,int key)
{
int low = ;
int high = count - ;
while(low <= high)
{
int mid = (low + high)/;
if (arr[mid] == key)
{
return mid;
}
else if(arr[mid] > key)
{
high = mid - ;
}
else
{
low = mid + ;
}
}
}
C/C++ 排序&&查找算法(面试)的更多相关文章
- javascript排序 查找算法大全
在pptv的实习结束了, 忙着找工作的事,顺便把数据结构的那本书重新复习了一遍.为了加深印象,特意把里面的常用的排序.查找算法用js写了一遍 具体的实例在我的github上,大家可以访问的: http ...
- 深入JDK源码之Arrays类中的排序查找算法(转)
原文出处: 陶邦仁 binarySearch()方法 二分法查找算法,算法思想:当数据量很大适宜采用该方法.采用二分法查找时,数据需是排好序的. 基本思想:假设数据是按升序排序的,对于给定值x,从序列 ...
- Java常用的排序查找算法
public static void main(String[] args) { // bubbleSort(); // int[] a = {20,2,10,8,12,17,4,25,11 ...
- Java数据结构 遍历 排序 查找 算法实现
请查看:http://blog.csdn.net/zhanghao_hulk/article/details/35372571#t13
- PHP的排序算法跟查找算法
排序算法: (1)冒泡排序 $arr = array(15,8,20,50,37,85,10,5,11,4); //冒泡排序 function maoPao($arr){ for($i = 0; $i ...
- C# 基础排序与查找算法
排序算法: class Sort { static void swap<T>(ref T a, ref T b) { T tmp = a; a = b; b = tmp; } #regio ...
- PHP数组基本排序算法和查找算法
关于PHP中的基础算法,小结一下,也算是本博客的第一篇文章1.2种排序算法冒泡排序:例子:个人见解 5 6 2 3 7 9 第一趟 5 6 2 3 7 9 5 2 6 3 7 9 5 2 3 6 7 ...
- php 中的查找算法 和 排序方法(多字段排序)
一.查找算法 1.顺序查找(一个一个查,效率低,不用多说) 2.二分查找 /* php 二分查找 在$a数组里查找$x的位置 $a必须是一个以升序排序后的数组 */ function binsearc ...
- python实现折半查找算法&&归并排序算法
今天依旧是学算法,前几天在搞bbs项目,界面也很丑,评论功能好像也有BUG.现在不搞了,得学下算法和数据结构,笔试过不了,连面试的机会都没有…… 今天学了折半查找算法,折半查找是蛮简单的,但是归并排序 ...
随机推荐
- DataMember IsRequired属性
1.简介 在数据契约中,如果需要序列化时,则需要传入指定IsRequired属性: 摘要: 获取或设置一个值,该值用于指示序列化引擎在读取或反序列化时成员必须存在. public bo ...
- LightOJ1068 Investigation(数位DP)
这题要求区间有多少个模K且各位数之和模K都等于0的数字. 注意到[1,231]这些数最大的各位数之和不会超过90左右,而如果K大于90那么模K的结果肯定不是0,因此K大于90就没有解. 考虑到数据规模 ...
- VC创建预编译文件
Building a simple "hello world" Ogre application can take several seconds on a modern mach ...
- ural 1272. Non-Yekaterinburg Subway
1272. Non-Yekaterinburg Subway Time limit: 1.0 secondMemory limit: 64 MB A little town started to co ...
- 编译gcc4.7.3 其他版本的应该也可以
编译它真麻烦啊..耗费了我一下午..我是ubuntu10.10环境的.内置的gcc版本很老了,好像是4.2吧.源里又没有高版本的,于是自己编译了. 准备 下载gcc:点我打开 //源,找个最快的.下你 ...
- 【TYVJ】1307 联络员(最小生成树)
http://tyvj.cn/Problem_Show.aspx?id=1307 kruskal裸题.(水题红色警报) #include <cstdio> #include <cst ...
- Idea_Maven配置
操作方式:在install上右键——>Run***install 出现Run Configurations ——>右键——>Edit Run Configuration 1.Inst ...
- ARC指南1 - strong和weak指针
一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因 ...
- 完美洗牌&洗牌
完美洗牌问题,给定一个数组a1,a2,a3,...an,b1,b2,b3..bn,把它最终设置为b1,a1,b2,a2,...bn,an这样的. O(n)的算法,O(n)的空间. 对于前n个数,映射为 ...
- Scrum会议3
组名称:天天向上 项目名称:连连看 参会成员:王森(Master)张金生 张政 栾骄阳 时间:2016.10.18 已完成内容: 1.GUI布局设计 2.通过在网上大量阅览代码,大体了解连连看游戏制作 ...