C++ 輸入一個動態大小的數組

以往我們在進行排序等運算時需要輸入一串數,我發現很多都是輸入的數需要我們自己提供,比如輸入1 2 3 4 5 6 7,我們需要輸入元素的個數7,很多時候因爲我們預先設置好的數組是大小固定的。如果我們輸入的元素個數不固定怎麼辦?

int *a = new int[255];  //最大255     這裏需要有一個上限大小,我不知道怎麼申請一個上限都不固定的數組
	memset(a, 0, 255);   //所有元素清零   memset適用於所有類型,不同於memcpy
	int num=0;
	
	printf("請輸入一串數\n");
	
	do
	{
		scanf("%d",a+num);
		num++;
	} while (getchar() != '\n');

/*
如果寫成while(getchar() != '\n')

    這樣的話會把第一個元素給取走,少一個數
上述寫法每次取走一個都會刷新一下緩衝區,注意輸入最後一個數後面不要有空格
比如我們輸入 2 3 5 7 11 13 17 19(Enter)
num 記錄的是數的個數

*/

 下面是一個快排算法的完整代碼

#include "stdafx.h"
void QuickSort(int arry[], int L, int R)
{
	if (L >= R)
		return;
	int left = L, right = R;//在兩端設置兩個遊標
	int pivot = arry[left];   //左端設爲中間的值

	while (left<right)
	{
		while (left<right&&arry[right]>=pivot)  //如果右邊的值大於中間值  則靠近右側遊標
		{
			right--;

		}
		if (left < right)   

		{
			arry[left] = arry[right];  //交換左右

		}
		while (left<right&&arry[left]<=pivot)   //交替靠近左邊

		{
			left++;
		}
		if (left < right)
		{
			arry[right] = arry[left];  //交換

		}
		if (left>=right)
		{
			arry[left] = pivot;
		}
	}
	QuickSort(arry, L, right - 1);   //重複兩次
	QuickSort(arry, right+1, R);

}


int main()
{
	//int a[20];
	int *a = new int[255];
	memset(a, 0, 255);
	int num=0;
	
	printf("請輸入一串數\n");
	
	do
	{
		scanf("%d",a+num);
		num++;
	} while (getchar() != '\n');

	/*int *b = new int[num];
	memcpy(b, a, sizeof(a)/sizeof(a[0]));*/
	QuickSort(a, 0, num);
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章