这几种排序方法分别为:冒泡排序,选择排序,插入排序,快速排序
1.冒泡排序:
思想:简单的说就是想办法把一堆数据中最大的数不停地往后边排。
代码:
class Bubble{
// /**
// * 测试方法
// */
// public void test(int i){
// i++;
// System.out.println(i);
// }
public void sort(int arr[]){
int temp = 0;//设置这个变量的目的是为了实现数值的交换
//冒泡排序
for(int i=0;i
arr[j+1]){
//交换
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
// //遍历数组输出最后结果
// for(int i=0;i
2.选择排序:
思想:在给定的一堆数据中找到最小的(或者最大的)数跟数据的第一个数交换(最后一个数交换),然后第二次再在排好的数据中(不要把排好的第一个数算在其中)找最小的(或者最大的)数跟数据的的第二个数(倒数第二个数)交换,以此类推,不断的进行下去,最后就OK了。
代码:
/**
* 选择排序类
*/
class Select{
public void sort(int arr[]){
int temp = 0;
for(int j=0;j
arr[k]){
//修改最小
min = arr[k];
minIndex = k;
}
}//当退出for就找到了这次的最小值
temp = arr[j];
arr[j] = arr[minIndex];
arr[minIndex] = temp;
}
// //遍历数组 输出最后结果
// for(int i=0;i
3.插入排序:
思想:把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素(那肯定是有序的),无序表中有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
代码:
/**
* 插入排序类
*/
class InsertSort{
//插入排序方法
public void sort(int arr[]){
for(int i=0;i
=0&&insertVal
4.快速排序:
思想:通过一趟排序将要排序的数据分隔成独立的两部分,其中一部分的所有的数据都要比另一部分的所有的数据都要小,然后再对于这两部分分别进行以上的操作,以此达到整个数据
变成有序的数据。简单地说就是在一堆数据中找到这些数据中中间的那个数,然后把比这个中间数大的放在中间数的右边,比它小的数放在中间数的左边,然后再次递归一样的对于左边的数,和右边的数进行以上操作。
代码:
**
* 快速排序类
*/
class QuickSort{
//快速排序方法
public void sort(int left,int right,int [] array){//传进的是数组最左边的下标,数组最右边的下标,数组
int l = left;
int r = right;
int pivot = array[(left+right)/2];
int temp = 0;
while(l
pivot) r--;
if(l>=r) break;
temp = array[l];
array[l] = array[r];
array[r] = temp;
if(array[l]==pivot) --r;
if(array[r]==pivot) ++l;
}
/*System.out.println("the current array is");
for(int i=0;i<5;i++){
System.out.print(" "+array[i]);
}*/
if(l==r){
l++;
r--;
}
if(left
l) sort(l,right,array);
}
}
最后,总体上分析一下这四种排序的效率:
速度(由小到大):
冒泡,选择,插入,快速
并且这些排序会随着数据量的增大,速度优势会更加明显。
快速排序速度比较快的原因是:前三种排序多是单个进程进行的,而快速排序是多进 程来实现排序的。但是快速排序进行排序时会占用特别多的内存(当你运用快速排序对一个特别大的数组进行排序时,你会发现你的内存突然间就上去了)。所以说快速排序的效率并不高,因为它会占用特别多的内存和CPU。
注意:在排序时,如果数据量比较大的话,就不要打印了,因为打印会占用特别多的CPU。