# 顺序表算法补充

<span style="font-size:18px;">//[]
int BinarySearch(SeqList *pSeq, ElemType x)
{
assert(pSeq);
int left = 0;
int right = pSeq->size - 1;
while(left<=right)
{
int cur = left+(right-left)/2;
if(pSeq->array[cur] == x)
{
return cur;
}
else if(pSeq->array[cur]>x)
{
right = cur - 1;
}
else
left = cur + 1;
}
return -1;
}

//////////////////////////////////递归实现二分查找
int BinarySearch_R(SeqList *pSeq,int left,int right ,ElemType x)
{
if (left<=right)
{
int mid = left+(right-left)/2;
if( x== pSeq->array[mid])
return mid;
else if(x<pSeq->array[mid])
return BinarySearch_R(pSeq,left,mid-1,x);
else if(x>pSeq->array[mid])
return BinarySearch_R(pSeq,mid+1,right,x);
}
else
return -1;
}

//////////冒泡排序优化
void  BubbSort_op(SeqList *s)
{
int exchange = 0;
for(size_t i = 0; i < s->size-1;++i)
{
for(size_t j = 0; j < s->size-1-i; ++j)
{
if(s->array[j] > s->array[j+1])
{
ElemType tmp = s->array[j];
s->array[j] = s->array[j+1];
s->array[j+1] = tmp;
exchange = 1;
}
}
if(exchange == 0)
return;
}
}

/////////////////////选择排序
void  SelectSort(SeqList *s)
{
for(size_t i = 0; i < s->size-1;++i)
{
int maxind = i;
for(size_t j = i+1; j < s->size; ++j)
{
if(s->array[j] > s->array[maxind])
maxind = j;
}
//change maxind  and  i;
ElemType tmp = s->array[i];
s->array[i] = s->array[maxind];
s->array[maxind] = tmp;
}
}

/////////////////////选择排序优化
void  SelectSort_op(SeqList *s)
{
int max = s->size-1;
int min = 0;
//从两端往中间走，比较，循环次数缩小一半
while(max >= min)
{
int maxind = max;
int minind = min;
//当遇到刚好[6,5]时，尴尬了。兑换
if(s->array[min]>s->array[max])
{
ElemType tmp1 = s->array[max];
s->array[max] = s->array[min];
s->array[min] = tmp1;
}
///找到最大最小值
for(int i = min;i<=max;++i)
{
if(s->array[i]>s->array[maxind])
{
maxind = i;
}
if(s->array[i]<s->array[minind])
{
minind = i;
}
}
///兑换并缩小范围
ElemType tmp = s->array[minind];
s->array[minind] = s->array[min];
s->array[min] = tmp;
ElemType tmp1 = s->array[maxind];
s->array[maxind] = s->array[max];
s->array[max] = tmp1;
max--;
min++;
}
}</span>


• 本文已收录于以下专栏：

## 顺序表插入算法

• wcwz020140
• 2014年09月22日 18:59
• 864

## 顺序表的定义、初始化、及插入、删除、查询操作，将算法转化成具体的代码

#include using namespace std; #define LIST_INIT_SIZE  100 #define LISTINCREMENT   10 int OK=1; ...
• hackerain
• 2010年10月01日 17:38
• 9361

## 实现顺序表各种基本运算的算法

/*algo2-1.cpp*/ #include #include #define MaxSize 50 typedef char ElemType; typedef struct ...
• lilanfeng1991
• 2013年01月27日 14:36
• 1619

## 算法设计学习：顺序表算法

• banbanlin
• 2014年07月31日 22:26
• 1652

## 数据结构之顺序表，插入，删除等

• Li__YingYing
• 2013年03月17日 19:02
• 1792

## 顺序表逆置算法（数据改进）

﻿﻿ #include #include #define maxsize 1000000 #define numsize 1000 typedef struct {  int *elem...
• jia1506
• 2016年09月26日 20:17
• 316

## 顺序表基本运算算法

//顺序表基本运算算法 #include #include #define MaxSize 50 typedef int ElemType; typedef struct { ElemTy...
• Dorlife
• 2017年09月08日 17:53
• 1057

## 使用c#实现顺序表的操作

using System; using System.Collections.Generic; using System.Text; namespace 线性结构 { /* ...
• jjx0224
• 2010年08月30日 16:20
• 2102

## 顺序表应用1：多余元素删除之移位算法

• chandoudeyuyi
• 2015年09月19日 13:59
• 2306

## <顺序表>从一个有序顺序表中删除重复的元素

/* 从一个有序顺序表中删除重复的元素并返回新的表长，要求空间复杂度为O(1); */ # include typedef int ElemType; typedef struct { El...
• jdzd123
• 2017年01月02日 10:30
• 1335

举报原因： 您举报文章：顺序表算法补充 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)