部分内容及图片为网上下载,如造成不便请通知
算法的性能对比
插入排序
插入排序算法是所有排序方法中最简单的一种算法,其主要的实现思想是将数据按照一定的顺序一个一个的插入到有序的表中,最终得到的序列就是已经排序好的数据。
选择排序
每一趟排序,都从当前位置到最后的数字中找到最小的数字,然后交换到当前位置,即第i趟在待排序数据arr[i-1]~arr[n-1]中选出最小的数据,将它与r[i-1]交换;所以,第n趟排序完,那么前面n个就是已经排好序的。
冒泡排序
第一趟:首先将第一个元素与第二个元素进行比较,若为逆序,则将两元素交换。然后比较第二、 第三个元素,依次类推,直到第n-1和第n个元素进行了比较和交换。经过第一趟,最大的元素便被交换到第n个位置。
第二趟:对前n-1个元素进行第二趟起泡排序,将其中最大元素交换到第n-1个位置。如此继续,直到某一趟排序未发生任何交换时,排序完毕。对n个元素的序列,起泡排序最多需要进行n-1趟。
快速排序
首先设定一个分界值,通过该分界值将数组分成左右两部分。将大于等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
递归以上步骤,数组最终排序完成。
void QuickSort(T arr[], int left, int right) {
if (NULL == arr || left >= right || 0 > left || 0 > right)
return;
int i = left;
int j = right;
int key = arr[left];
while (i < j){
while (i < j && key <= arr[j]) {// 从右往左找大的
j--;
}
arr[i] = arr[j];
while (i < j && key >= arr[i]) {// 从左往右找小的
i++;
}
arr[j] = arr[i];
}
arr[i] = key;
QuickSort(arr, left, i - 1);
QuickSort(arr, i + 1, right);
}