c快速排序这段代码为什么不会越界?
发布网友
发布时间:2022-04-22 09:35
我来回答
共5个回答
热心网友
时间:2023-07-31 22:53
这个是C的特点 自由 *少 编译器 不会对数组越界 给警告
得靠自己 仔细 定义了数组长度 N ,就该牢记 元素 下标是 0 到 N-1
给你介绍 一个 smart 点的方法
需要 为 N个的数组元素
则不定义长度为N的数组 ,而是定义 长度 为N + 1的数组
存放数据是 从 下标为1的元素开始 一直到下标N
下标为 0 的元素 不用来 存放 数组元素 ,而是用来存放 数组的元素个数 N(或者是最后一个元素的下标)
热心网友
时间:2023-07-31 22:53
for(int i=0;i<10;i++)
{ a[i] = i;}
程序一般是这样写,0刚好是数组第一个元素,10刚好是数组的最后一个元素加1。
数组的使用不能越界,定义多少用多少,定义了10,就只能用0~9。要是这样乱用的话,在堆栈中有新的数组分配使用时,会将你乱用的空间毁掉,你上面能成功时因为你使用的数组就得这个而已。
热心网友
时间:2023-07-31 22:54
内存给num分配的存储位置紧跟数组a后面,在printf(“%d”, a【num】)时输出了数组a后面地址上的内容,即num的值,该值只读不可修改
热心网友
时间:2023-07-31 22:54
越界数组的值是不确定的,WIN7下 VS2008编译运行以下代码
#include<stdio.h>
int a[10];
void main()
{
printf("%d\n",a[10]);
printf("%d\n",a[100]);
printf("%d\n",a[1000]);
printf("%d\n",a[10000]);
}
前面3行输出 0
第4行就出错强行关闭程序了
热心网友
时间:2023-07-31 22:55
C++中,并不会自动检查下标越界问题。
第一个程序中,a[10]=a[9],改变了不属于数组空间的内存单元。这个错误不会在编译和连接中反应出来,而是会一直运行下去,知道出现结果不正确。严重时可能导致死机。
第二个程序也是同样道理,数组a只申请了三个整形的内存空间,越界的部分修改了内存中原来的数据。不过在这里编译会报错。
要保证不破坏其他存储空间中的数据只能说自己注意了。
C语言的快速排序问题,为什么非要 if (low>=high) break;而if (low=...
=是赋值,==才是等于
C语言中快速排序法的原理及应用
“快速排序法”使用的是递归原理,下面我结合一个例子来说明“快速排序法”的原理。首先给出一个数组{53,12,98,63,18,72,80,46, 32,21},先找到第一个数--53,把它作为中间值,也就是说,要把53放在一个位置,使得它左边的值比它小,右边的值比它大。{21,12,32, 46,18,53...
C语言的快速排序的算法是什么啊?
值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 一趟快速排序的算法是: 1)设置两个变量I、J,排序开始的时候:I=0,J=N-1; 2)以第一个数组元素作为关键数据,赋值给key,即 key=A[0]; 3)从J开始向前搜索,即由后开始向...
快速排序,看了解释还是不会,求通俗点的
因为排序思想是把数往两边扔,所以左右两边的数大小与key的关系相反*/ { i++; } a[j] = a[i]; } a[i] = key;/*当在当组内找完一遍以后就把中间数key回归*/ sort(a, left, i - 1);/*最后用同样的方式对分出来的左边的小组进行同上的做法*/ sort(a, i...
菜鸟提问 c语言关于快速排序
其实,最想说明的是那段交换的代码 R[j]^=R[i];R[i]^=R[j];R[j]^=R[i];一定要排除 i==j 的情况。即自己与自己交换的情况。如:a=9;a^=a;/*a=0*/ a^=a;/*a=0*/ a^=a;/*a=0*/ a就不再是10了。include<stdio.h> include<stdlib.h> void quicksort(int R[],int...
...则选用堆排序,若初始记录无序则最好选用快速排序。这是为什么...
1,堆排序的性能:时间复杂度总是Nlogn(N) 的。2,快速排序不属于原地排序,由于程序中使用了递归,需要递归调用栈的支持,而栈的长度取决于递归调用的深度。在平均情况下,需要O(logn) 的栈空间;最坏情况下,栈空间可达O(n) 。1 )划分元素的选取是影响时间性能的关键。2 )输入数据次序越乱,...
C语言快速排序问题!
问题解决了吗 给你提供两种排序方式,希望帮到你,看程序:include<stdio.h> #include<string.h> void bubble(int *a,int n); // 冒泡法, 定义两个参数:数组首地址与数组大小void choise(int *a,int n); // 选择法,排序 int main() { int a[11]={1,5,6,8,4,2,10,56...
冒泡排序法和快速排序比较的算法
sum += n-1 + c(m-1) + c(n-m)return sum/n如果在输入的数组中最多只有一个元素,那么Quichsort将不会进行比较,如示例2-613中所示。对于更大的n,这段代码将考虑每个划分值m(从第一个元素到最后一个,每个都是等可能的)并且确定在这个元素的位置上进行划分的运行开销。然后,这段代码将统计这些开销的...
快速排序算法c语言
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n?) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。插入排序算法 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该...
快速排序n个数最糟糕的情况要多少次?为什么
快速排序:对一个队列,以他队尾的数据为基准值,先划分成两块数据,一块都大于这个值,一块小于这个值,然后对这两块进行同样的操作,这是最快的排序方法,运算时间复杂度N*logN 下面是代码:public static void sort(int[] a){ long time1,time2;int c;time1=System.currentTimeMillis();//...