/** * 这里的排序默认从小到大 * 以正数作为排序内容 *//** * 冒泡排序算法 * * @param A 排序内容 * @param N 大小 */publicstaticvoidBubbleSort(int[]A,intN){
int temp =0;boolean flag;//这里 j=n-1 可以避免 A[i + 1] 超过范围for(int j =N-1; j >0; j--){
flag =true;//一趟排序for(int i =0; i < j; i++){
//前面的大于后面的 需要交换顺序if(A[i]>A[i +1]){
temp =A[i];A[i]=A[i +1];A[i +1]= temp;
flag =false;}}//某一趟排序 flag 没有变化 ,表示这一趟排序下来,已经为排好序了if(flag){
break;}}}
2. 插入排序
/** * 插入排序 * 由小到大 * * @param A 传入待排序内容 * @param N 待排序的元素个数 */publicstaticvoidInsertSort(int[]A,intN){
int tmp, j;//认为第一个已经有序for(int i =1; i <N; i++){
//一趟排序,从已有序的序列 从最后一个位置往前,//如果有序序列最后一个(A[j])大于现在这个A[i]就 把A[j] 往后挪一个位置。//下一次重复上述操作
tmp =A[i];// j = i-1 表示有序序列的最大个数未i-1一个,//最开始的时候 就是0 即认为第一个元素自己是有序的for(j = i; j >0&&A[j -1]> tmp; j--){
//将元素依次往后挪一个位置A[j]=A[j -1];}A[j]= tmp;}}
3. 选择排序
/** * 选择排序 */publicstaticvoidselectionSort(int[]A,intN){
int minPosition;//每一次选择里面一个最小的for(int i =0; i <N; i++){
//从A 中的下标为i开始到N-1 寻找其中最小的元素 将位置赋给 minPosition
minPosition =scanForMin(A, i,N-1);//将i 和 minPosition 所指的元素互换位置,其中A[i] 表示有序序列 A[i~N-1] 为无序序列swap(A, minPosition, i);}}privatestaticvoidswap(int[] a,int minPosition,int i){
int tmp = a[i];
a[i]= a[minPosition];
a[minPosition]= tmp;}privatestaticintscanForMin(int[] a,int i,intN){
int minPosition = i;for(int j = i +1; j <=N; j++){
if(a[j]< a[minPosition]){
minPosition = j;}}return minPosition;}
4. 希尔排序
/** * 希尔排序 * * @param A 排序内容 * @param N 排序内容个数 */publicstaticvoidshellSort(int[]A,intN){
int d;//开始的增量间隔for(d =N/2; d >0; d /=2){
//希尔增量序列int tmp, j;for(int i = d; i <N; i++){
//插入排序 把d换成1 就是shell排序
tmp =A[i];for(j = i; j >= d &&A[j - d]> tmp; j -= d)A[j]=A[j - d];A[j]= tmp;}}}
5. 堆排序
5.1 方案一:
/** * 堆排序 方案一 使用最小堆 每次出来一个就放在临时数组里面 * * @param A 排序元素内容 * @param N 元素个数 */publicstaticvoidheapSort(int[]A,intN)throwsException{
int tempA[]=newint[N];//构建最小堆MinHeap minHeap =buildMinHeap(A,N);for(int i =0; i <N; i++){
tempA[i]=deleteMin(minHeap);}//将tmpA的元素复制给Afor(int i =0; i <N; i++){
A[i]= tempA[i];}}
5.2 方案二:
/** * 堆排序 方案二 构建最大堆 每次将出来的元素放在末尾 ,末尾元素放在最大位置 * * @param A 排序元素内容 * @param N 元素个数 */public static void heapSort2(int[] A,int N) throws Exception {
//构建最大堆for(int i = N /2; i >=0; i--) {
percDownMax(A, N -1, i,0,0,0);
}
//将最大元素 放在末尾,每次放最大元素在末尾for(int i = N -1; i >0; i--) {
swap(A,0, i);
percDownMax(A, i -1,0,0,0,0);
}
}
文章评论