1.冒泡排序
将序列中所有元素两两比较,将最大的放在最后面 ,将剩余序列中所有元素两两比较,将最大的放在最后面
重复第二步,直到只剩下一个数
public void bubbleSort(int[] a){
int length=a.length;
int temp;
for(int i=0;i<a.length;i++){
for (int j = 0; j< a.length-i-1; j++) {
//比较两个的值
if(a[j]>a[j+1]){
//交换位置
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
2.插入排序
1.首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用插入。
⒉.设定插入数和得到已经排好序列的最后一个数的位数 insertNum和j=i-1。
3.从最后一个数开始向前循环,如果插入数小于当前数,就将当前数向后移动一位。
4.将当前数放置到空着的位置,即j+1。
public void insertSort(int[] a){
int length=a.length;//数组长度
int insertNum;//要插入的数
for(int i=1;i<length;i++){//插入的次数
insertNum=a[i];//要插入的数
int j=i-1;//已经排序好的系列元素个数
while(j>=0&& a [j]>insertNum){//序列从后到前循环,将大于insertNum的数后移一格
a[j+1]=a[j];//元素后移一格
j--;
}
a[j+1]=insertNum;//将要插入的数放在要插入的位置
}
}
3.希尔排序
将数的个数设为n,取奇数k=n/2;将下标差值为k的数为一组,构成有序序列
再取k=k/2,将下标差值为k的书分为一组,构成有序序列
重复第二步,直到k=1执行简单插入排序
public void sheelSort(int [] a){
int d=a.length;
while(d!=0){
d=d/2;
for (int x= 0; x < d; x++) {//分的组数
for (int i = x+d;i<a.length; i+=d) {//组中的元素,从第二个数开始
int j=i-d;//j为有序数列的最后一位的位数
int temp=a[i];//要插入的元素
for(;j>=0 && temp<a[j];j-=d){//从后往前遍历
a[j+d]=a[j];//向后移动d位
}
a[j+d]=temp;
}
}
}
}
4.简单选择排序
遍历整个序列,将最小的数放在最前面
遍历剩下的序列,将最小的数放在最前面
重复第二步,直到只剩下一个数
public void selectSort(int[] a){
int length=a.length;
for (int i = 0; i <length ; i++) {//循环次数
int key=a[i];
int position=i;
for(int j=i+1;j<length;j++){ //选出最小值的位置
if(a[j] < key){
key=a[j];
position=j;
}
}
a[position]=a[i];//交换位置
a[i]=key;
}
}
5.快速排序
选择第一个数为p,小于p的数放在左边,大于p的数放在右边
递归的将p左边和右边的数都按照第一步进行,直到不能递归
public static void quickSort(int[]numbers,int start,int end){
if(start<end){
int base=numbers[start];//选定的基准值
int temp;//记录临时中间值
int i=start,j=end;
do{
while ((numbers[i]<base)&&(i<end))
i++;
while ((numbers[j] > base) && (j>start))
j--;
if(i<=j){
temp=numbers[i];
numbers[i]=numbers[j];
numbers[j]=temp;
i++;
j--;}}
while(i<=j);
if(start <j)
quickSort(numbers,start,j);
if(end>i)
quickSort(numbers,i,end);
}
}
}
}