您的位置:首页 > 其它

对排序的总结&&二分查找

2014-08-04 23:49 253 查看
排序:是将一个数据元素的任意序列,重新排列成一个按照关键字的序列。

通常在排序的过程中需要进行两种基本操作:

1、比较两个关键字的大小;

2、将一个关键字从一个位置移动到另一个位置。

排序的方法有很多种,每一种方法都有其各自的优缺点,分别适合于不同的环境下使用,对于内部排序大致可以分为插入排序,

交换排序、选择排序,归并排序等排序方法。

下面我介绍几种比较常用的特别是在我们找工作面试中经常会问到的几种排序方法:

一. 冒泡排序

冒泡排序的思想比较简单:先将n个元素中的第一个和第二个比较,如果两个元素的位置为逆序,那么就交换两个个元素的位置;然后比较第二个和第三个元素关键字,如此类推,直到比较第n-1个元素和第n个元素为止;

下面是冒泡排序的代码形式:

<span style="white-space:pre">		</span>//冒泡排序
<span style="white-space:pre">		</span>int[] arr = new int[]{5,78,2,6,34,213,4};
for(int j=0;j<arr.length-1;j++){<span style="white-space:pre">		</span>//比较的轮数
for(int i=0;i<arr.length-1-j;i++){
if(arr[i]>arr[i+1]){<span style="white-space:pre">	</span>     //<span style="font-size:18px;">如果两个元素的位置为逆序,那么就交换两个元素的位置</span>
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
System.out.print(arr[i]+" ");
}
}
效率的分析:

1、空间效率:仅使用一个辅存单元。

2、时间效率:如果元素的个数为n,则总共要进行n-1趟排序,对j个元素的字序列进行一趟冒泡排序需要进行j-1次关键字比较。

二、选择排序

选择排序的思想:第一趟,在n个元素用第一个位置上的元素与其余n-1个元素进行比较,如果逆序则交换位置, 则第一个角标上的元素就确定好了;

第二趟,第二个位置的元素再与其余的元素比较,如果逆序则交换元素的位置,则第二个位置 上的元素就确定好了,以此类推,直到整个序列有序。

下面是选择排序的代码形式:

<span style="white-space:pre">			</span>for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
效率的分析:

1、空间效率:选择排序也只需要一个辅助空间。

2、选择排序移动的次数相对较少,在序列基本有序的情况下基本不需要移动次数,所以选择排序的大 量时间是用在了比较上了。

三、二分法查找

二分查找也叫折半查找,此方法需要带查找的表必须是有序的;

二分查找的基本思想:首先将查找表中间位置数据元素的关键字与给定关键字比较,如果相等则查找成功;否则 利用中间元素将表一分为二,如果中间元素关键字大于给定关键字,则在前一子表中进行 折半查找,否则在后一子表中进行折半查找,重复上述动作直到查找成功。到最后如果子
表为空则查找不成功。

下面是二分查找的代码形式:

for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+",");
}

int minIndex = 0;
int maxIndex = arr.length-1;
int midIndex = (minIndex+maxIndex)/2;
int number = 100;

while(arr[midIndex]!=number){
if(number<arr[midIndex]){
maxIndex = midIndex-1;
}else if(number>arr[midIndex]){
minIndex = midIndex+1;
}
if(minIndex>maxIndex){
midIndex = -1;
break;
}

midIndex = (minIndex+maxIndex)/2;
}
System.out.println();
System.out.println(midIndex);
二分查找:适用于不经常变动而查找频繁的有序表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: