个人学习总结用:数据结构与算法线性表的操作+一分钟学会用sort函数排序+快速排序

这篇博客介绍了线性表的插入和删除操作,以及两种排序方法:快速排序和使用C++标准库的sort函数。通过示例代码详细展示了如何实现这些基本操作,并提供了快速排序的完整过程。此外,还提到了如何利用sort函数进行升序和降序排序。
摘要由CSDN通过智能技术生成

个人学习总结用:数据结构与算法线性表的操作+一分钟学会用sort函数排序+快速排序

一、线性表的插入

//第i个位置要插入元素
Status ListInsert(SqList *L, int i, ElemType e)
{
    int k;//(下标)
    if(L->length == MAXSIZE)//是否还有空间
      return REROR;
    if(i < 1 || i > L->length+1)//是否i不在正确的范围内(记得有个+1)
      return ERROR;
    if(i <= L->length)//不在表尾就移动表的每个元素
    {
       for(k = L->length-1; k >= i-1; k--)
         L->data[k+1] = L->data[k]//前面的k+1是为了向后移动
    } 
    L->data[i-1] = e;//插入
    L->length++;//表长加1.
    return OK;   
}

二.线性表的元素删除
算法思路:
1.判断删除位置是否在表内
2.取出
3.移动表,(向前移)
4.表长减1

Status ListDelet(SqList *L; int i; ElemType *e)
{
    int k;//(第几个)
    if(L->length == 0) return ERROR;
    if(i < 1 || i > L->length) return ERROR;//合理
    
    *e = L->data[i-1];
    if(i < L->length)//比长度短
    {
       for(k = i; k < L->length; k++)
          L->data[k-1] = L->data[k];
    }
    L->length--;
    
    return OK;   
}

三、快速排序

#include<stdio.h>

void quick_sort(int a[], int left, int right)
{
	int i = left, j = right;
	int temp;
	int middle;
	
	middle = a[(left + right) / 2];
	
	while(i <= j)//找与交换 
	{
		//左到右
		while(a[i] < middle)
		{
			i++;
		}
		//右到左 
		while(a[j] > middle)
		{
			j--;
		 }
		 //交换 
		 if(i <= j)
		 {
		 	temp = a[i];
		 	a[i] = a[j];
		 	a[j] = temp;
		 	i++;//完成交接 
		 	j--;
		  } 
	}
	
	if(left < j) 
	{
	    quick_sort(a, left, j); 
	} 
	if(right > i)
	{
		quick_sort(a, i, right);
	}
	
}

int main()
{
	int a[] = {9, 90, 87, 73, 19, 34, 2, 8, 109, 7, 43, 77, 99, 11};
	int i, length = sizeof(a) / sizeof(a[0]);
	
	quick_sort(a, 0, length-1);
	
	for(i = 0; i < length; i++)
	{
		printf("%d ", a[i]);
	}
	
	return 0;
}

在这里插入图片描述
sort函数排序(记得源文件要改用cpp而不是c)
第一步:添加头文件 #include<algorithm>
第二步:使用sort函数排序: std::sort(a, a+length); //a是数组首地址,a+length是数组尾地址(这样是默认升序排序)。

如果要降序:
第一步:同上。
第二步:写一个函数:

bool com(int a, int b)
{
  return a > b;
}

第三步:使用sort函数排序 std::sort(a, a+length, com);
完成。
例:

#include<stdio.h>
#include<algorithm>
bool com(int a, int b)
{
	return a > b;
}

int main()
{
	int a[] = {9, 90, 87, 73, 19, 34, 2, 8, 109, 7, 43, 77, 99, 11};
	int i, length = sizeof(a) / sizeof(a[0]);
	
	//quick_sort(a, 0, length-1);
	std::sort(a, a+length, com); //这里是排序
	
	for(i = 0; i < length; i++)
	{
		printf("%d ", a[i]);
	}
	
	return 0;
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dr.勿忘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值