个人学习总结用:数据结构与算法线性表的操作+一分钟学会用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;
}