顺序表算法补充

原创 2015年11月21日 20:53:52

顺序表算法补充

对于上篇中的顺序表,仅仅是实现了简单的操作,现在对其添加二分查找,快速排序及其优化操作

说明:二分查找分别用循环,递归实现

冒泡排序改进:增加个岗哨监控是否交换,没有交换就证明顺序搞定,退出

选择排序:每次内存循环找到最大值与外层位置进行交换

选择排序改进优化:每次内存找到最大最小两个值,进行交换,循环次数减少一半。。

注: 如果各位有发现那些个不足之处,或者可改进之地,欢迎留言交流,共同进步。

<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
  • wcwz020140
  • 2014年09月22日 18:59
  • 864

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

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

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

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

算法设计学习:顺序表算法

题目:已知一个顺序表L,其中的元素递增有序
  • banbanlin
  • banbanlin
  • 2014年07月31日 22:26
  • 1652

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

大三上半年把较多的精力放在了专业课上,一直也没分配多少时间自己去再关注其他感兴趣的,当你主动去学知识时,它就变的似乎更有趣了,进入正题,这几天开始又学习了数据结构,主要如下: 一数据结构重点研究...
  • Li__YingYing
  • Li__YingYing
  • 2013年03月17日 19:02
  • 1792

顺序表逆置算法(数据改进)

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

顺序表基本运算算法

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

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

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

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

顺序表应用1:多余元素删除之移位算法 Time Limit: 1000ms   Memory limit: 2000K  有疑问?点这里^_^ 题目描述 一个...
  • chandoudeyuyi
  • chandoudeyuyi
  • 2015年09月19日 13:59
  • 2306

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

/* 从一个有序顺序表中删除重复的元素并返回新的表长,要求空间复杂度为O(1); */ # include typedef int ElemType; typedef struct { El...
  • jdzd123
  • jdzd123
  • 2017年01月02日 10:30
  • 1335
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:顺序表算法补充
举报原因:
原因补充:

(最多只允许输入30个字)