1.快速排序
(1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
(2)实例:
(3)用java实现
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
2.直接插入排序
//插入排序,假设第n个数之前的数都已经排好序了,对第n个数进行排序时会跟前面的数进行比较,
//将比这个数大的数都整体往后移动一个位置
public static void main(String[] args) {
int a[]={49,38,65,97,76,13,27,49,78,34};
int temp=0;
for (int i = 1; i < a.length; i++) {
int j=i-1;
temp=a[i];
for(;j >= 0 && a[j] > temp;j--){
a[j+1]=a[j];
}
a[j+1]=temp;
}
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
3.希尔排序(最小增量排序)
//算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,
//然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。以此类推直到增量减到1时,进行直接插入排序后,跳出循环排序完成。
public static void main(String[] args) {
int a[]={49,38,65,97,76,13,27,49,78,34};
double d=a.length;
while(true){
d=Math.ceil(d/2);
int d1=(int)d;
int temp=0;
for (int i = 1; i < a.length; i+=d1) {
int j=i-d1;
temp=a[i];
for(;j>=0&&a[j]>temp;j-=d1){
a[j+d1]=a[j];
}
a[j+d1]=temp;
}
if(d1==1){
break;
}
}
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
4.简单选择排序
//在数组中选出最小的放在数组第一个,接着选出第二小的放在第二个,以此类推进行排序
public static void main(String[] args) {
int a[]={49,38,65,97,76,13,27,49,78,34};
for (int i = 0; i < a.length; i++) {
int j=i+1;
int temp=a[i];
int position = i;
for(;j<a.length;j++){
if(a[j]<a[i]){
a[i]=a[j];
position=j;
}
}
a[position]=temp;
}
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
5.冒泡排序
//在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,
//让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
public static void main(String[] args) {
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
int temp=0;
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}