八大內部排序包括:
l插入排序:
直接插入排序
希爾排序(又稱增量排序)
l選擇排序:
簡單選擇排序
堆排序l交換排序:
氣泡排序
快速排序
l歸併排序
l基數排序(又稱桶排序)
排序演算法解析:
1、 直接插入排序與希爾排序
直接排序與希爾排序同屬於插入排序,不一樣的是,直接排序每次將tmp元素與前面所有的元素進行比較,直到到第乙個元素或者當前元素不大於tmp;而希爾排序每次講tmp元素與前面每隔增量個元素進行比較,直到第乙個元素或者當前元素不大於tmp。
直接插入排序**如下:
void insertsort( elemtype *arr, int num )
}
希爾排序**如下:
void shellpass( elemtype*, int, int );
void shellsort( elemtype *arr, int num )
}void shellpass( elemtype *arr, int num, int incre )
//if( j != i - incre )//存在比arr[i]小的數,這個實際上加不加都是可以的
arr[j + incre] = tmp;
}}
2、 選擇排序
選擇排序每次選擇剩下未排序的所有元素中最小的元素。
簡單排序每次需要表裡剩下的所有元素以獲得最小元素,堆排序只需要構建乙個最小堆,每次獲得堆得根節點,並調整二叉堆即可。
具體簡單選擇排序**如下:
int findmin( elemtype *, int, int);
void choosesort( elemtype *arr, int num )
}int findmin( elemtype *arr, int start, int end )
} return min_pos;
}
堆排序演算法(暫定)
3、 交換排序
交換排序包括氣泡排序與快速排序。
氣泡排序可以設定乙個哨兵判斷乙個交換過程是否發生交換,如果沒有發生交換,說明剩下的資料已經排好序了。
快速排序最重要的是partition過程,該過程中的i位置表示第i個位置之前的所有元素都小於tmp, j表示遍歷到的位置。
氣泡排序**如下:
void bubblesort( elemtype *arr, int num )
} }}
快速排序**如下:
int partition( elemtype *, int, int );
//void exchange(elemtype *, elemtype * );
//在pre < end的前提下進行排序的
void quicksort( elemtype *arr, int pre,int end )
}//快排最重要的部分, i表示最後乙個比tmp小的元素的方位, j表示遍歷方位
int partition( elemtype *arr, int begin, int end)
} elemtype t;
t = arr[i+1];
arr[i+1] = arr[end];
arr[end] = t;
return i+1;
}
4、 歸併排序
歸併排序是典型的二分法(分治法)排序演算法,首先將兩個子串行分別排好序,然後合併上述已經排好序的兩個子串行,在這裡需要開闢乙個陣列,以便在合併兩個排好序的子串行的時候排序,接著把排好序的元素複製到原始陣列中。
歸併排序**如下:
elemtype tmparr[max_size];//申請乙個全域性陣列,儲存交換後的資料
void merge( elemtype*, int , int, int );//合併陣列
void mergesort( elemtype *arr, int first, int end )
void merge( elemtype *arr, int first, int mid, int end )
else
}while( i <= mid )
tmparr[t++] = arr[i++];
while( j <= end )
tmparr[t++] = arr[j++];
for( int k = first; k <=end; ++k )
arr[k] = tmparr[k];
}
5、 基數排序(暫定)
八大內部排序
排序,就是重新排列表中的元素,使得表中元素滿足按關鍵字有序的過程。排序有許多種,常用的八大內部排序為氣泡排序 插入排序 選擇排序 希爾排序 快速排序 歸併排序 基數排序 堆排序 這幾種排序沒有絕對的優劣,每種排序都有他們適用範圍 氣泡排序每一趟排序可以確定乙個元素的最終位置,若一次掃瞄並沒有元素進行...
八大內部排序
先來看看8種排序之間的關係 一 直接插入排序 如下 1 public void inerrtsort int a 10 a j 1 tem 11 12 看起來簡單 實則有太多細節 二 希爾排序 public void shellsort int list list j gap temp 縮小增量 g...
八大內部排序 歸併排序
歸併排序 merge sort 將兩個或兩個以上的有序列表組合成乙個新的有序表,合併的m,n長度的兩個表的複雜度為o m n n個數的序列進行歸併共有ceil logn 次,每一次合併都是n常數級別的,所以總的複雜度為o nlogn 同時歸併排序是一種穩定的排序。如下,採用的是利用遞迴的方式書寫,要...