1.选择排序
排序步骤
- 首先从为排序的数组中找到最小(大)的元素,放在排序序列起始位置
- 再从剩余元素中找到最小(大)元素,放在已排序列末尾
- 重复第二步,直至结束。
void selectSort(int arr[]){
for(int i = 0; i<arr.length; i++){
int min = i;
for(int j = i+1; j<arr.length; j++){
if(arr[j]<arr[i]){
min = j;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
冒泡排序
排序步骤
- 比较相邻元素,如果第1个比第2个大(小),交换位置
- 每一对相邻元素重复比较,从第一组直至最后一组,最后大元素,将是最大的。
- 重复操作,直至结束
void bubbleSort(int arr[]){
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr.length - i -1; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
归并排序
排序步骤
- 申请两个空间,其和大小是排序数组大小
- 设定两个指针,最初位置分别为两个已经排序序列的起始位置
- 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
- 重复步骤 3 直到某一指针达到序列尾
- 将另一序列剩下的所有元素直接复制到合并序列尾
插入排序
排序步骤
- 把第一个元素不动,第二个至最后一个元素进行当成未排序元素
- 从头至尾进行扫描,将扫描到的元素放到合适的位置
void insertSort(int arr[]){
for(int i = 1,i < arr.length, i++){
for(int j = i, j > 0, j--){
if(arr[j] < arr[j-1]){
int temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
}
快速排序
排序步骤
- 序列中挑一个"基准"(pivot)
- 排序数组,小于基准的放在基准前面,大于基准的放在基准后面。分区
- 递归调用排序分区
void quickSort(int arr[], int low, int high){
if(low < high){
int index = getIndex(arr, low, high);
quickSort(arr, 0, index-1);
quickSort(arr, index+1, high);
}
}
int getIndex(int arr[], int low, int high){
int tmp = arr[low];
while(low < high){
while(low < high && arr[high] >= tmp){
high--;
}
arr[low] = arr[high];
while(low < high && arr[low] <= tmp){
low++;
}
arr[high] = arr[low];
}
arr[low] = tmp;
return low;
}
堆排序