www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > > 充電吧
[導(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é)點(diǎn)
*????????? iDataNum為數(shù)組長度
*函數(shù)返回:分割后的分割數(shù)位置
*函數(shù)說明:調(diào)整iCurNode處的節(jié)點(diǎn),形成大頂堆???
*********************************************************/
void SlipDown(int *pDataArray,int iCurNode,int iDataNum)
{
?int temp = pDataArray[iCurNode];??? //記錄需要調(diào)整的節(jié)點(diǎn)值

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

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

?pDataArray[iCurNode] = temp;
}

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

?for (int i = iDataNum; i > 1; i--)??? //根據(jù)大頂堆進(jìn)行排序
?{
??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);??? //隨機(jī)獲得偏移位置

?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需要?dú)w并排序的起始位置
*????????? iEnd為pDataArray需要?dú)w并排序的結(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ù),則進(jìn)行挪動和插入
??{
???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()
{
?//獲取當(dāng)前時間
?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)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計(jì)中至關(guān)重要的兩個環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計(jì)工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉