new动态创建一维数组
普通数组在栈上分配内存,栈很小;如果需要存放更多的元素,必须在堆上分配内存,堆很大。
动态创建一维数组的语法 : 数据类型 *指针 = new 数据类型[数组长度];
释放一维数组的语法:delete [] 指针;
注意:
- #include
- using namespace std;
-
- int main()
- {
- int *arr = new int[10];
-
- for(int i = 0; i < 10; i++)
- {
- arr[i] = i; //数组表示
- cout<< "arr[" << i << "]=" << *(arr+i) <
//指针表示 - }
-
- delete[]arr;
- }
qsort函数
qsort函数用于对各种数据类型的数组进行排序。
函数原型:
void qsort (void* base, size_t num, size_t size,
int (*compar)(const void*,const void*));

第一个参数:数组的起始地址。
第二个参数:数组元素的个数(数组长度)。
第三个参数:数组元素的大小(sizeof(数组的数据类型))。
第四个参数:回调函数的地址。
回调函数决定了排序的顺序,声明如下:
int compar(const void *p1, const void *p2);
1)如果函数的返回值< 0 ,那么p1所指向元素会被排在p2所指向元素的前面。
2)如果函数的返回值==0,那么p1所指向元素与p2所指向元素的顺序不确定。
3)如果函数的返回值> 0 ,那么p1所指向元素会被排在p2所指向元素的后面。

qsort()函数的其它细节:
- #include
// 包含头文件。 - using namespace std; // 指定缺省的命名空间。
-
- int compasc(const void* p1, const void* p2) // 升序的回调函数。
- {
- return *((int*)p1) - *((int*)p2);
- }
-
- int compdesc(const void* p1, const void* p2) // 降序的回调函数。
- {
- return *((int*)p2) - *((int*)p1);
- }
-
- int main()
- {
- int a[8] = { 4,2,7,5,8,6,1,3 };
-
- qsort(a,sizeof(a)/sizeof(int),sizeof(int),compasc); // 对数组a进行升序排序。
-
- for (int i = 0; i < 8; i++)
- {
- cout << "a[" << i << "]=" << a[i] << endl;
- }
-
- qsort(a, sizeof(a) / sizeof(int), sizeof(int), compdesc); // 对数组a进行降序排序。
-
- for (int i = 0; i < 8; i++)
- {
- cout << "a[" << i << "]=" << a[i] << endl;
- }
- }
折半查找
折半查找也叫二分查找,只适用于已排序的数组(升序降序都可以)。
- #include
// 包含头文件。 - using namespace std; // 指定缺省的命名空间。
-
- // 在arr中查找key,成功返回key在arr中的数组下标,失败返回-1。
- int search(int arr[], int len, int key)
- {
- int low = 0, high = len-1, mid; // 初始化:low=0,high=数组长度-1。
-
- while (low <= high)
- {
- mid = (low + high) / 2; // 计算mid指针的位置。
-
- if (arr[mid] == key) return mid; // 查找成功。
- else if (arr[mid] > key) high = mid - 1; // 继续在前半区查找。
- else low = mid + 1; // 继续在后半区查找。
-
- }
-
- return -1; // 查找失败。
- }
-
- int main()
- {
- int a[10] = { 7,9,12,16,21,25,30,35,41,48 }; // 必须是已排好序的数组。
-
- if (search(a, 10, 30) >= 0) cout << "在数组a中查找成功。\n";
- else cout << "在数组a中查找失败。\n";
- }