各种SORT总结如下:
小动画网站:http://jsdo.it/norahiko/oxIy/...
冒泡排序
原理:每次遍历一遍数组,遇到num[i + 1] < num[i],swap; 循环遍历直至顺序正确
代码:
public void bubbleSort(int[] nums){
while(!sorted(nums)){
//do nothing
}
}
boolean sorted(int[] nums){
boolean sorted = true;
int j = 1;
for(int i= 0; i < nums.length - 1; i++){
if(nums[j] < nums[i]){
//swap
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
sorted = false;
}
j++;
}
return sorted;
}
快速排序
原理:找到一个基准(pivot),divide and conquer, 每次都将比pivot小的放到左边,比pivot大的放到右边,然后对左边右边分别再进行快速排序,直到分的子数组只有一个数字为止。
(前一版代码写得太乱了不便理解,这里写一个更广为接受的)理解为“左边右边同时开始,遇到不符合顺序的两个就进行交换”
int partition(int arr[], int left, int right)
{
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];
while (i <= j) {
while (arr[i] < pivot && i <= j)
i++;
while (arr[j] > pivot && i <= j)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
return i;
}
void quickSort(int arr[], int left, int right) {
int index = partition(arr, left, right);
if (left < index - 1)
quickSort(arr, left, index - 1);
if (index < right)
quickSort(arr, index, right);
}