在寫這篇文章的時候我還是初學者--希望能通過部落格觀察自己的成長
首先宣告:演算法均參考自 《資料結構教程》--李春葆著
所用到的資料結構---這裡為簡便,使用簡單的int值
classelemtype
public
intdata;
}
main函式
publicstatic
void
main(string args)
for(elemtype r:r)
system.out.print(r.data);
system.out.println();
quicksort(r,0,9); //
快速排序
insertsort(r,10); //
直接插入排序
insertsort2(r,10); //
折半插入排序
shellsort(r,10); //
希爾排序
bubblesort(r,10); //
氣泡排序
selectsort(r,10); //
直接選擇排序
heapsort(r,10); //
堆排序(資料序列的下標從1開始)
for(elemtype r:r)
system.out.print(r.data);
}
插入排序: 包括直接插入排序,折半插入排序,希爾排序
staticvoid insertsort(elemtyper,int n)//
直接插入排序
r[j+1]=tmp; //
在j+1處插入r[i];
} }
staticvoid insertsort2(elemtype r, int n)//
折半插入排序
for(j=i-1;j>=high+1;j--) //
元素後移
r[j+1]=r[j];
r[high+1]=tmp; //插入}
}
staticvoid shellsort(elemtype r,int n) //
希爾排序
r[j+gap]=tmp;
}gap=gap/2; //
減少增量
} }
交換排序: 包括氣泡排序和快速排序
staticvoid bubblesort(elemtype r ,int n)//
氣泡排序
if(!flag)
return; //
本次沒有發生交換--提前結束排序
} }
staticvoid quicksort(elemtype r,int s,int t)//
快速排序(s,t分別是頭尾)
r[i]=tmp;
quicksort(r,s,i-1);
quicksort(r,i+1,t); //
i為中間值,所以只需要將i左邊和i右邊的處理即可
} }
選擇排序: 包括直接選擇排序和堆排序
staticvoid selectsort(elemtyper ,int n)//
直接選擇排序
}}
//堆排序
static
void sift(elemtype r ,int low, int high)//
調整堆
else
break; //
篩選結束
} r[i]=tmp; //
被篩選節點的值放入最終位置
}
static
void heapsort(elemtype r,int n)//
堆排序(注意,為了與二叉樹的順序結構儲存一致,堆排序的資料序列的下標從1開始)
}
}
這裡要注意一下,由於堆排序的資料序列下標從1開始,因此資料格式跟其他排序不一樣
這裡貼出乙個專門用於堆排序測試的main函式
publicstatic
void
main(string args)
for(int i=1;i<11;i++)
system.out.print(r[i].data);
system.out.println();
heapsort(r,10);
for(int i=1;i<11;i++)
system.out.print(r[i].data);
}
歸併排序:
publicstatic
void mergesort(elemtype r,int n)//
自底向上的二路歸併演算法
public
static
void mergepass(elemtyper,int length,int n)//
對整個表進行一趟歸併
public
static
void merge(elemtype r,int low ,int mid ,int
high)
else
while(i<=mid) //
將第一段餘下部分複製到r1中
while(j<=high) //
將第二段餘下部分複製到r1中
for(k=0,i=low;i<=high;k++,i++)//
將r1複製回r中
r[i]=rt[k];
}
排序 排序演算法整理
經常零零散散的用到排序演算法,將幾類常見的總結下來 時間複雜度o n 2 空間複雜度o 1 穩定排序 param arr public static void insersort int arr else arr j 1 tmp 氣泡排序 時間複雜度 o n 2 空間複雜度o 1 穩定排序 para...
排序演算法整理
template void cinsertsort mysort function compare template void cselectsort mysort function compare swap datas i datas id void cshellsort mysort funct...
排序演算法整理
先把常用排序演算法進行分類 插入排序 直接插入排序 折半插入排序 希爾排序 交換排序 氣泡排序 快速排序 選擇排序 簡單選擇排序 堆排序 歸併排序 基數排序 下面我們乙個乙個來看 1.直接插入排序 進行n 1趟排序,每趟把乙個元素插入到前面已經排好序的序列中,其時間複雜度為o n 並且由於判斷要插入...