冒泡排序
初遇:
冒泡排序,正如它的名字,一个泡泡由小变大,从下至上冒出来。
算法描述:
从最底部的两个数做比较,如果下面的比上面的大,则交换位置(这里我们默认排序后为:小->大)。一次循环完成后,最大的就到了最上方的位置,所以在下次循环的时候只需要到总个数减1的地方即可。
代码实现:
public static void bubbleSort(int datas[]){
int j = 0;
int i = 0;
for(j=0; j<datas.length; j++){
for(i=0; i<datas.length-1-j; i++){
if(datas[i]>datas[i+1]){
int temp = datas[i];
datas[i] = datas[i+1];
datas[i+1] = temp;
}
}
}
}
个人总结:
最初自己在写冒泡的时候很容易和选择排序搞混淆,感觉代码长得都差不多。但是后来理解了一下,貌似清晰了不少,虽然还是会忘。。。
选择排序
初遇:
感觉选择排序最简单,考试让写冒泡排序来着,后来写成了选择排序。。。┑( ̄Д  ̄)┍ 怪我咯
算法描述:
自己的理解:选择排序就是先把第一个拿起来,记住他的下标,然后依次和后面的做比较,如果遇到比你拿起来的还小,就记住它的下标,一圈以后,就找到了最小的值的下标,然后把拿起来那个和最小的交换。然后换第二个开始比较,每次比较的次数都在上一次的基础上少了1次。
代码实现:
public static void selectSort(int datas[]){
int j = 0;
int i = 0;
for(j=0; j<datas.length; j++){
int minIndex = j;
for(i=j+1; i<datas.length; i++){
if(datas[minIndex] > datas[i]){
minIndex = i;
}
}
int temp = datas[j];
datas[j] = datas[minIndex];
datas[minIndex] = temp;
}
}
插入排序
算法描述:
插入排序是取得待排序数组的第二个值,然后和第一个比较,如果第一个比较大,就将前面的往后移动一位,当前面已经没有数字的时候,将取得的值放在空出的位置上。
代码实现:
public static void quickSort(int datas[]){
int j = 0;
int i = 0;
for(j=1; j<datas.length; j++){
int temp = datas[j];
for(i=j-1; i>=0; i--){
if(datas[i]>temp){
datas[i+1] = datas[i];
}else{
break;
}
}
datas[i+1] = temp;
}
}
快速排序
代码实现:
public static void quickSort(int[] datas, int left, int right){
int midd = 0;
if(left < right){
midd = partition(datas, left, right);
quickSort(datas, left, midd-1);
quickSort(datas, midd+1, right);
}
}
public static int partition(int[] datas, int left, int right){
int pivot = datas[left];
while(left < right){
while(left < right && datas[right] >= pivot){
right--;
}
if(left < right){
datas[left] = datas[right];
left++;
}
while(left < right && datas[left] <= pivot){
left++;
}
if(left < right){
datas[right] = datas[left];
right--;
}
}
datas[left] = pivot;
return left;
}