當前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]#includevoid PrintData(int *pDataArray, int iDataNum){?for (int i = 0; i < iDataNum; i++)??printf

#include

void PrintData(int *pDataArray, int iDataNum)
{
?for (int i = 0; i < iDataNum; i++)
??printf("%d ", pDataArray[i]);
?printf("n");
?fflush(stdout);
}

//交換data1和data2所指向的整形
void DataSwap(int* data1, int* data2)
{
?int temp = *data1;
?*data1 = *data2;
?*data2 = temp;
}


/********************************************************
*函數(shù)名稱:ShellInsert
*參數(shù)說明:pDataArray 無序數(shù)組;
*????????? d????????? 增量大小
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 希爾按增量d的插入排序
*********************************************************/
void ShellInsert(int* pDataArray, int d, int iDataNum)
{
?for (int i = d; i < iDataNum; i += 1)??? //從第2個數(shù)據(jù)開始插入
?{
??int j = i - d;
??int temp = pDataArray[i];??? //記錄要插入的數(shù)據(jù)
??while (j >= 0 && pDataArray[j] > temp)??? //從后向前,找到比其小的數(shù)的位置
??{
???pDataArray[j+d] = pDataArray[j];??? //向后挪動
???j -= d;
??}

??if (j != i - d)??? //存在比其小的數(shù)
???pDataArray[j+d] = temp;
?}
}

/********************************************************
*函數(shù)名稱:ShellSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 希爾排序
*********************************************************/
void ShellSort(int* pDataArray, int iDataNum)
{
?int d = iDataNum / 2;??? //初始增量設(shè)為數(shù)組長度的一半
?while(d >= 1)
?{
??ShellInsert(pDataArray, d, iDataNum);
??d = d / 2;??? //每次增量變?yōu)樯洗蔚亩种?br />?}
}

/********************************************************
*函數(shù)名稱:GetNumInPos
*參數(shù)說明:num 一個整形數(shù)據(jù)
*???? pos 表示要獲得的整形的第pos位數(shù)據(jù)
*說明:??? 找到num的從低到高的第pos位的數(shù)據(jù)
*********************************************************/
int GetNumInPos(int num,int pos)
{
?int temp = 1;
?for (int i = 0; i < pos - 1; i++)
??temp *= 10;

?return (num / temp) % 10;
}

/********************************************************
*函數(shù)名稱:RadixSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 基數(shù)排序
*********************************************************/
#define RADIX_10 10??? //整形排序
#define KEYNUM_31 10???? //關(guān)鍵字個數(shù),這里為整形位數(shù)
void RadixSort(int* pDataArray, int iDataNum)
{
?int *radixArrays[RADIX_10];??? //分別為0~9的序列空間
?for (int i = 0; i < 10; i++)
?{
??radixArrays[i] = (int *)malloc(sizeof(int) * (iDataNum + 1));
??radixArrays[i][0] = 0;??? //index為0處記錄這組數(shù)據(jù)的個數(shù)
?}

?for (int pos = 1; pos <= KEYNUM_31; pos++)??? //從個位開始到31位
?{
??for (int i = 0; i < iDataNum; i++)??? //分配過程
??{
???int num = GetNumInPos(pDataArray[i], pos);
???int index = ++radixArrays[num][0];
???radixArrays[num][index] = pDataArray[i];
??}

??for (int i = 0, j =0; i < RADIX_10; i++)??? //收集
??{
???for (int k = 1; k <= radixArrays[i][0]; k++)
????pDataArray[j++] = radixArrays[i][k];
???radixArrays[i][0] = 0;??? //復(fù)位
??}
?}
}

/********************************************************
*函數(shù)名稱:SlipDown
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iCurNode為堆中需要調(diào)整的節(jié)點
*????????? iDataNum為數(shù)組長度
*函數(shù)返回:分割后的分割數(shù)位置
*函數(shù)說明:調(diào)整iCurNode處的節(jié)點,形成大頂堆???
*********************************************************/
void SlipDown(int *pDataArray,int iCurNode,int iDataNum)
{
?int temp = pDataArray[iCurNode];??? //記錄需要調(diào)整的節(jié)點值

?for (int iNextNode = iCurNode*2; iNextNode <= iDataNum; iNextNode = iCurNode*2)
?{
??if (iNextNode + 1 <= iDataNum
???&& pDataArray[iNextNode] < pDataArray[iNextNode + 1])??? //尋找iCurNode子節(jié)點中的大者
???iNextNode++;
??if (pDataArray[iNextNode] > temp)??? //大的值上移
???pDataArray[iCurNode] = pDataArray[iNextNode];???
??else??? //結(jié)束調(diào)整
???break;

??iCurNode = iNextNode;??? //更新需要調(diào)整的節(jié)點
?}

?pDataArray[iCurNode] = temp;
}

/********************************************************
*函數(shù)名稱:HeapSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 堆排序
*********************************************************/
void HeapSort(int* pDataArray, int iDataNum)
{
?pDataArray--;??? //讓原先數(shù)組下標0對應(yīng)1,便于堆中節(jié)點的訪問
?for (int i = iDataNum/2; i > 0; i--)??? //調(diào)整為大頂堆
??SlipDown(pDataArray, i, iDataNum);

?for (int i = iDataNum; i > 1; i--)??? //根據(jù)大頂堆進行排序
?{
??DataSwap(&pDataArray[i], &pDataArray[1]);
??SlipDown(pDataArray, 1, i - 1);
?}
}

/********************************************************
*函數(shù)名稱:Split
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iBegin為pDataArray需要快速排序的起始位置
*????????? iEnd為pDataArray需要快速排序的結(jié)束位置
*函數(shù)返回:分割后的分割數(shù)位置
*說明:??? 以iBegin處的數(shù)值value作為分割數(shù),
使其前半段小于value,后半段大于value
*********************************************************/
int Split(int *pDataArray,int iBegin,int iEnd)
{
?int rIndex = rand() % (iEnd - iBegin + 1);??? //隨機獲得偏移位置

?int pData = pDataArray[iBegin + rIndex];??? //將iBegin+rIndex處的值作為劃分值

?while (iBegin < iEnd)??? //循環(huán)分割數(shù)組,使其前半段小于pData,后半段大于pData
?{
??while (iEnd > iBegin && pDataArray[iEnd] >= pData)??? //從后向前尋找小于pData的數(shù)據(jù)位置
???iEnd--;

??if (iEnd != iBegin)
??{
???pDataArray[iBegin] = pDataArray[iEnd];??? //將小于pData數(shù)據(jù)存放到數(shù)組前方
???iBegin++;

???while (iBegin < iEnd && pDataArray[iBegin] <= pData)
????iBegin++;

???if (iBegin != iEnd)
???{
????pDataArray[iEnd] = pDataArray[iBegin];??? //將大于pData數(shù)據(jù)存放到數(shù)組后方
????iEnd--;
???}
??}
?}

?pDataArray[iEnd] = pData;??? //此時iBegin=iEnd,此處存儲分割數(shù)據(jù)pData
?return iEnd;
}

/********************************************************
*函數(shù)名稱:QSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iBegin為pDataArray需要快速排序的起始位置
*????????? iEnd為pDataArray需要快速排序的結(jié)束位置
*說明:??? 快速排序遞歸函數(shù)
*********************************************************/
void QSort(int* pDataArray, int iBegin, int iEnd)
{
?if (iBegin < iEnd)
?{
??int pos = Split(pDataArray, iBegin, iEnd);??? //獲得分割后的位置
??QSort(pDataArray, iBegin, pos - 1);?????????? //對分割后的前半段遞歸快排
??QSort(pDataArray, pos + 1, iEnd);???????????? //對分割后的后半段遞歸快排
?}
}

/********************************************************
*函數(shù)名稱:QuickSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 快速排序
*********************************************************/
void QuickSort(int* pDataArray, int iDataNum)
{
?QSort(pDataArray, 0, iDataNum - 1);
}


/********************************************************
*函數(shù)名稱:Merge
*參數(shù)說明:pDataArray 無序數(shù)組;
*????????? int *pTempArray 臨時存儲合并后的序列
*????????? bIndex 需要合并的序列1的起始位置
*????????? mIndex 需要合并的序列1的結(jié)束位置
并且作為序列2的起始位置
*????????? eIndex 需要合并的序列2的結(jié)束位置
*說明:??? 將數(shù)組中連續(xù)的兩個子序列合并為一個有序序列
*********************************************************/
void Merge(int* pDataArray, int *pTempArray, int bIndex, int mIndex, int eIndex)
{
?int mLength = eIndex - bIndex;??? //合并后的序列長度
?int i = 0;??? //記錄合并后序列插入數(shù)據(jù)的偏移
?int j = bIndex;??? //記錄子序列1插入數(shù)據(jù)的偏移
?int k = mIndex;??? //記錄子序列2摻入數(shù)據(jù)的偏移

?while (j < mIndex && k < eIndex)
?{
??if (pDataArray[j] <= pDataArray[k])
??{
???pTempArray[i++] = pDataArray[j];
???j++;
??}
??else
??{
???pTempArray[i++] = pDataArray[k];
???k++;
??}
?}

?if (j == mIndex)??? //說明序列1已經(jīng)插入完畢
??while (k < eIndex)
???pTempArray[i++] = pDataArray[k++];
?else??????????????? //說明序列2已經(jīng)插入完畢
??while (j < mIndex)
???pTempArray[i++] = pDataArray[j++];

?for (i = 0; i < mLength; i++)??? //將合并后序列重新放入pDataArray
??pDataArray[bIndex + i] = pTempArray[i];
}

/********************************************************
*函數(shù)名稱:BottomUpMergeSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 自底向上的歸并排序
*********************************************************/
void BottomUpMergeSort(int* pDataArray, int iDataNum)
{
?int *pTempArray = (int *)malloc(sizeof(int) * iDataNum);??? //臨時存放合并后的序列
?int length = 1;??? //初始有序子序列長度為1
?while (length < iDataNum)
?{
??int i = 0;
??for (; i + 2*length < iDataNum; i += 2*length)
???Merge(pDataArray, pTempArray, i, i + length, i + 2*length);
??if (i + length < iDataNum)
???Merge(pDataArray, pTempArray, i, i + length, iDataNum);
??length *= 2;??? //有序子序列長度*2
?}
?free(pTempArray);
}

/********************************************************
*函數(shù)名稱:RecursionMergeSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*????????? int *pTempArray 臨時存放合并的序列
*???? iBegin為pDataArray需要歸并排序的起始位置
*????????? iEnd為pDataArray需要歸并排序的結(jié)束位置
*說明:??? 自頂向下的歸并排序遞歸函數(shù)
*********************************************************/
void RecursionMergeSort(int* pDataArray, int *pTempArray, int iBegin, int iEnd)
{
?if (iBegin < iEnd)
?{
??int middle = (iBegin + iEnd) / 2;
??RecursionMergeSort(pDataArray, pTempArray, iBegin, middle);??? //前半段遞歸歸并排序
??RecursionMergeSort(pDataArray, pTempArray, middle + 1, iEnd);? //后半段歸并排序
??Merge(pDataArray, pTempArray, iBegin, middle + 1, iEnd + 1);?? //合并前半段和后半段
?}
}

/********************************************************
*函數(shù)名稱:UpBottomMergeSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 自頂向下的歸并排序
*********************************************************/
void UpBottomMergeSort(int* pDataArray, int iDataNum)
{
?int *pTempArray = (int *)malloc(sizeof(int) * iDataNum);??? //臨時存放合并后的序列
?RecursionMergeSort(pDataArray, pTempArray, 0, iDataNum - 1);
?free(pTempArray);
}

//查找數(shù)值iData在長度為iLen的pDataArray數(shù)組中的插入位置
int FindInsertIndex(int *pDataArray, int iLen, int iData)
{
?int iBegin = 0;
?int iEnd = iLen - 1;
?int index = -1;??? //記錄插入位置
?while (iBegin <= iEnd)
?{
??index = (iBegin + iEnd) / 2;
??if (pDataArray[index] > iData)
???iEnd = index - 1;
??else
???iBegin = index + 1;
?}
?if (pDataArray[index] <= iData)
??index++;
?return index;
}

/********************************************************
*函數(shù)名稱:BinaryInsertSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 二分查找插入排序
*********************************************************/
void BinaryInsertSort(int* pDataArray, int iDataNum)
{
?for (int i = 1; i < iDataNum; i++)??? //從第2個數(shù)據(jù)開始插入
?{
??int index = FindInsertIndex(pDataArray, i, pDataArray[i]);??? //二分尋找插入的位置

??if (i != index)??? //插入位置不為i,才挪動、插入
??{
???int j = i;
???int temp = pDataArray[i];
???while (j > index)??? //挪動位置
???{
????pDataArray[j] = pDataArray[j-1];
????j--;
???}
???pDataArray[j] = temp;??? //插入
??}
?}
}

/********************************************************
*函數(shù)名稱:InsertSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 插入排序(從前向后尋找)
*********************************************************/
void InsertSort(int* pDataArray, int iDataNum)
{
?for (int i = 1; i < iDataNum; i++)??? //從第2個數(shù)據(jù)開始插入
?{
??int j = 0;
??while (j < i && pDataArray[j] <= pDataArray[i])??? //尋找插入的位置
???j++;

??if (j < i)??? //i位置之前,有比pDataArray[i]大的數(shù),則進行挪動和插入
??{
???int k = i;
???int temp = pDataArray[i];
???while (k > j)??? //挪動位置
???{
????pDataArray[k] = pDataArray[k-1];
????k--;
???}
???pDataArray[k] = temp;??? //插入
??}
?}
}

/********************************************************
*函數(shù)名稱:InsertSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 插入排序(從后向前尋找)
*********************************************************/
void InsertSort1(int* pDataArray, int iDataNum)
{
?for (int i = 1; i < iDataNum; i++)??? //從第2個數(shù)據(jù)開始插入
?{
??int j = i - 1;
??int temp = pDataArray[i];??? //記錄要插入的數(shù)據(jù)
??while (j >= 0 && pDataArray[j] > temp)??? //從后向前,找到比其小的數(shù)的位置
??{
???pDataArray[j+1] = pDataArray[j];??? //向后挪動
???j--;
??}

??if (j != i - 1)??? //存在比其小的數(shù)
???pDataArray[j+1] = temp;
?}
}

/********************************************************
*函數(shù)名稱:SelectionSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 選擇排序
*********************************************************/
void SelectionSort(int* pDataArray, int iDataNum)
{
?for (int i = 0; i < iDataNum - 1; i++)??? //從第一個位置開始
?{
??int index = i;
??for (int j = i + 1; j < iDataNum; j++)??? //尋找最小的數(shù)據(jù)索引
???if (pDataArray[j] < pDataArray[index])
????index = j;

??if (index != i)??? //如果最小數(shù)位置變化則交換
???DataSwap(&pDataArray[index], &pDataArray[i]);
?}
}

/********************************************************
*函數(shù)名稱:BubbleSort
*參數(shù)說明:pDataArray 無序數(shù)組;
*???? iDataNum為無序數(shù)據(jù)個數(shù)
*說明:??? 冒泡排序
*********************************************************/
void BubbleSort(int* pDataArray, int iDataNum)
{
?BOOL flag = FALSE;??? //記錄是否存在交換
?for (int i = 0; i < iDataNum - 1; i++)??? //走iDataNum-1趟
?{
??flag = FALSE;
??for (int j = 0; j < iDataNum - i - 1; j++)???
???if (pDataArray[j] > pDataArray[j + 1])
???{
????flag = TRUE;
????DataSwap(&pDataArray[j], &pDataArray[j + 1]);
???}

???if (!flag)??? //上一趟比較中不存在交換,則退出排序
????break;
?}
}

//測試序列是否有序
BOOL CheckOrder(int *pDataArray, int iDataNum)
{
?for (int i = 0; i < iDataNum -? 1; i++)
??if (pDataArray[i] > pDataArray[i+1])
???return FALSE;
?return TRUE;
}

UINT64 time_fre;??? //時鐘頻率

UINT64 GetTimeM()
{
?//獲取當前時間
?LARGE_INTEGER curCounter;
?QueryPerformanceCounter(&curCounter);
?return curCounter.QuadPart*1000/time_fre;
}

void BubbleSortTest(int *pDataArray,int length, FILE *fp)
{
?//初始化數(shù)組
?for (int i = 0; i < length; i++)
??pDataArray[i] = rand()%100000;

?UINT64 begin;
?UINT64 end;
?begin = GetTimeM();
?BubbleSort(pDataArray, length);
?end = GetTimeM();

?fprintf(fp, " %d", int(end-begin));

?if (!CheckOrder(pDataArray, length))
??printf("BubbleSort algorithm failed!n");
?else
??printf("BubbleSort algorithm succeed!n");
}

void SelectSortTest(int *pDataArray,int length, FILE *fp)
{
?//初始化數(shù)組
?for (int i = 0; i < length; i++)
??pDataArray[i] = rand()%100000;

?UINT64 begin;
?UINT64 end;
?begin = GetTimeM();
?SelectionSort(pDataArray, length);
?end = GetTimeM();

?fprintf(fp, " %d", int(end-begin));

?if (!CheckOrder(pDataArray, length))
??printf("SelectSort algorithm failed!n");
?else
??printf("SelectSort algorithm succeed!n");
}

void InsertSortTest(int *pDataArray,int length, FILE *fp)
{
?//初始化數(shù)組
?for (int i = 0; i < length; i++)
??pDataArray[i] = rand()%100000;

?UINT64 begin;
?UINT64 end;
?begin = GetTimeM();
?InsertSort(pDataArray, length);
?end = GetTimeM();

?fprintf(fp, " %d", int(end-begin));

?if (!CheckOrder(pDataArray, length))
??printf("InsertSort algorithm failed!n");
?else
??printf("InsertSort algorithm succeed!n");
}

void BottomUpMergeSortTest(int *pDataArray,int length, FILE *fp)
{
?//初始化數(shù)組
?for (int i = 0; i < length; i++)
??pDataArray[i] = rand()%100000;

?UINT64 begin;
?UINT64 end;
?begin = GetTimeM();
?BottomUpMergeSort(pDataArray, length);
?end = GetTimeM();

?fprintf(fp, " %d", int(end-begin));

?if (!CheckOrder(pDataArray, length))
??printf("BottomUpMergeSort algorithm failed!n");
?else
??printf("BottomUpMergeSort algorithm succeed!n");
}

void UpBottomMergeSortTest(int *pDataArray,int length, FILE *fp)
{
?//初始化數(shù)組
?for (int i = 0; i < length; i++)
??pDataArray[i] = rand()%100000;

?UINT64 begin;
?UINT64 end;
?begin = GetTimeM();
?UpBottomMergeSort(pDataArray, length);
?end = GetTimeM();

?fprintf(fp, " %d", int(end-begin));

?if (!CheckOrder(pDataArray, length))
??printf("UpBottomMergeSort algorithm failed!n");
?else
??printf("UpBottomMergeSort algorithm succeed!n");
}

void QuickSortTest(int *pDataArray,int length, FILE *fp)
{
?//初始化數(shù)組
?for (int i = 0; i < length; i++)
??pDataArray[i] = rand()%100000;

?UINT64 begin;
?UINT64 end;
?begin = GetTimeM();
?QuickSort(pDataArray, length);
?end = GetTimeM();

?fprintf(fp, " %d", int(end-begin));

?if (!CheckOrder(pDataArray, length))
??printf("QuickSort algorithm failed!n");
?else
??printf("QuickSort algorithm succeed!n");
}

void HeapSortTest(int *pDataArray,int length, FILE *fp)
{
?//初始化數(shù)組
?for (int i = 0; i < length; i++)
??pDataArray[i] = rand()%100000;

?UINT64 begin;
?UINT64 end;
?begin = GetTimeM();
?HeapSort(pDataArray, length);
?end = GetTimeM();

?fprintf(fp, " %d", int(end-begin));

?if (!CheckOrder(pDataArray, length))
??printf("HeapSort algorithm failed!n");
?else
??printf("HeapSort algorithm succeed!n");
}

void RadixSortTest(int *pDataArray,int length, FILE *fp)
{
?//初始化數(shù)組
?for (int i = 0; i < length; i++)
??pDataArray[i] = rand()%100000;

?UINT64 begin;
?UINT64 end;
?begin = GetTimeM();
?RadixSort(pDataArray, length);
?end = GetTimeM();

?fprintf(fp, " %d", int(end-begin));

?if (!CheckOrder(pDataArray, length))
??printf("RadixSort algorithm failed!n");
?else
??printf("RadixSort algorithm succeed!n");
}

void ShellSortTest(int *pDataArray,int length, FILE *fp)
{
?//初始化數(shù)組
?for (int i = 0; i < length; i++)
??pDataArray[i] = rand()%100000;

?UINT64 begin;
?UINT64 end;
?begin = GetTimeM();
?ShellSort(pDataArray, length);
?end = GetTimeM();

?fprintf(fp, " %d", int(end-begin));

?if (!CheckOrder(pDataArray, length))
??printf("ShellSort algorithm failed!n");
?else
??printf("ShellSort algorithm succeed!n");
}

int main()
{
#define ARRAYLENGTH 10000??? //無序數(shù)組初始長度
#define ADDLENGTH 10000??? //無序數(shù)組增幅
#define MAXLENGTH 100000?? //最大無序數(shù)組長度

?int length;
?srand(time(NULL));
?//獲取時鐘頻率
?LARGE_INTEGER litmp;
?QueryPerformanceFrequency(&litmp);
?time_fre = (UINT64 )litmp.QuadPart;

?int *pDataArray = new int[MAXLENGTH];
?FILE *fp = fopen("data.txt", "w");??? //將結(jié)果存儲與data.txt文件中;
?????????????????????????????????????? //每一行代表一種排序在不同數(shù)據(jù)規(guī)模下的時間(毫秒)

?length = ARRAYLENGTH;
?for (; length <= MAXLENGTH; length += ADDLENGTH)
?{??
??BubbleSortTest(pDataArray, length, fp);
?}
?fprintf(fp, "n");

?length = ARRAYLENGTH;
?for (; length <= MAXLENGTH; length += ADDLENGTH)
?{??
??SelectSortTest(pDataArray, length, fp);
?}
?fprintf(fp, "n");

?length = ARRAYLENGTH;
?for (; length <= MAXLENGTH; length += ADDLENGTH)
?{??
??InsertSortTest(pDataArray, length, fp);
?}
?fprintf(fp, "n");

?length = ARRAYLENGTH;
?for (; length <= MAXLENGTH; length += ADDLENGTH)
?{??
??BottomUpMergeSortTest(pDataArray, length, fp);
?}
?fprintf(fp, "n");

?length = ARRAYLENGTH;
?for (; length <= MAXLENGTH; length += ADDLENGTH)
?{??
??UpBottomMergeSortTest(pDataArray, length, fp);
?}
?fprintf(fp, "n");

?length = ARRAYLENGTH;
?for (; length <= MAXLENGTH; length += ADDLENGTH)
?{??
??QuickSortTest(pDataArray, length, fp);
?}
?fprintf(fp, "n");

?length = ARRAYLENGTH;
?for (; length <= MAXLENGTH; length += ADDLENGTH)
?{??
??HeapSortTest(pDataArray, length, fp);
?}
?fprintf(fp, "n");

?length = ARRAYLENGTH;
?for (; length <= MAXLENGTH; length += ADDLENGTH)
?{??
??RadixSortTest(pDataArray, length, fp);
?}
?fprintf(fp, "n");

?length = ARRAYLENGTH;
?for (; length <= MAXLENGTH; length += ADDLENGTH)
?{??
??ShellSortTest(pDataArray, length, fp);
?}
?fprintf(fp, "n");

?fclose(fp);
?free(pDataArray);
?return 0;
}

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉