以往我們在進行排序等運算時需要輸入一串數,我發現很多都是輸入的數需要我們自己提供,比如輸入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;
}