[C/C++ 基礎] 兩個一維陣列交換和一維陣列反轉和氣泡排序函數收藏
[C/C++ 基礎] 兩個一維陣列交換和一維陣列反轉和氣泡排序函數收藏
#include <stdio.h>
#include <stdlib.h>
void SwapArray(int *nx,int *ny,int intArraySize);
void ReverseArray(int *pintArray,int intArraySize);
void BubbleSort(int *pintArray,int intArraySize,int intSW);//sw=1:small->big
int main()
{
int nx[5]={1,3,2,4,1};
int ny[5]={10,8,7,9,10};
int i;
printf("原始資料\n");
for(i=0;i<(sizeof(nx)/sizeof(int));i++)
{
printf("%d",nx[i]);
}
printf("\n");
for(i=0;i<(sizeof(ny)/sizeof(int));i++)
{
printf("%d",ny[i]);
}
printf("\n------------------\n");
printf("將兩陣列反轉\n");
ReverseArray(nx,(sizeof(nx)/sizeof(int)));
ReverseArray(ny,(sizeof(ny)/sizeof(int)));
for(i=0;i<(sizeof(nx)/sizeof(int));i++)
{
printf("%d",nx[i]);
}
printf("\n");
for(i=0;i<(sizeof(ny)/sizeof(int));i++)
{
printf("%d",ny[i]);
}
printf("\n------------------\n");
printf("將兩陣列交換\n");
SwapArray(nx,ny,sizeof(nx)/sizeof(int));
for(i=0;i<(sizeof(nx)/sizeof(int));i++)
{
printf("%d",nx[i]);
}
printf("\n");
for(i=0;i<(sizeof(ny)/sizeof(int));i++)
{
printf("%d",ny[i]);
}
printf("\n------------------\n");
printf("將兩陣small->big\n");
BubbleSort(ny,sizeof(ny)/sizeof(int),1);//small->big
BubbleSort(nx,sizeof(nx)/sizeof(int),1);//small->big
for(i=0;i<(sizeof(nx)/sizeof(int));i++)
{
printf("%d",nx[i]);
}
printf("\n");
for(i=0;i<(sizeof(ny)/sizeof(int));i++)
{
printf("%d",ny[i]);
}
printf("\n------------------\n");
printf("將兩陣big->small\n");
BubbleSort(nx,sizeof(nx)/sizeof(int),0);//big->small
BubbleSort(ny,sizeof(ny)/sizeof(int),0);//big->small
for(i=0;i<(sizeof(nx)/sizeof(int));i++)
{
printf("%d",nx[i]);
}
printf("\n");
for(i=0;i<(sizeof(ny)/sizeof(int));i++)
{
printf("%d",ny[i]);
}
return 0;
}
void SwapArray(int *nx,int *ny,int intArraySize)
{
int i;
int intBuf;
for(i=0;i<intArraySize;i++)
{
intBuf=*(nx+i);
*(nx+i)=*(ny+i);
*(ny+i)=intBuf;
}
}
void ReverseArray(int *pintArray,int intArraySize)
{
int intBuf;
int i;
for(i=(intArraySize-1);i>(intArraySize-1)/2;i--)
{
if(i!=(intArraySize-1-i))
{
intBuf=*(pintArray+i);
*(pintArray+i)=*(pintArray+(intArraySize-1-i));
*(pintArray+(intArraySize-1-i))=intBuf;
}
else
{
break;
}
}
}
void BubbleSort(int *pintArray,int intArraySize,int intSW)//sw=1:small->big
{
int i,j;
int intBuf;
for(i=0;i<intArraySize;i++)//做幾次
{
for(j=0;j<(intArraySize-i-1);j++)
{
if((intSW==1) && (*(pintArray+j)>*(pintArray+j+1)))
{//small->big
intBuf=*(pintArray+j);
*(pintArray+j)=*(pintArray+j+1);
*(pintArray+j+1)=intBuf;
}
if((intSW!=1) && (*(pintArray+j)<*(pintArray+j+1)))
{//big->small
intBuf=*(pintArray+j+1);
*(pintArray+j+1)=*(pintArray+j);
*(pintArray+j)=intBuf;
}
}
}
}
One thought on “[C/C++ 基礎] 兩個一維陣列交換和一維陣列反轉和氣泡排序函數收藏”
排序法的性能評估指標:
穩定:如果a原本在b前面,而a=b,排序之後a仍然在b的前面。
不穩定:如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面。
時間複雜度:對排序數據的總的操作次數。反映當n變化時,操作次數呈現什麼規律。
空間複雜度:是指算法在計算機內執行時所需存儲空間的度量,它也是數據規模n的函數。
PS. 個人認為目前最為推薦 [ 效率(速度)&額外記憶體使用量&穩定度 ] 的排序法 – 归并排序/歸併排序/合併排序 (Merge Sort)