1、快速排序算法
public class QuickSort {
public static void quickSort(int k[] ,int n){QSort(k,0,n-1);
}
private static void QSort(int[] k, int low, int high) {
// TODO 自动生成的方法存根
int point;
if(low <high){
point=Partiton(k,low,high);
QSort(k,low, point-1);
QSort(k,point+1,high);
}
}
private static int Partiton(int[] k,int low,int high) {
int point;
point=k[low];
while(low < high){
while(low < high&& k[high]>=point){
high--;
}
swap(k,low,high);
while(low < high && k[low]<=point){
low++;
}
swap(k,low,high);
}
return low;
}
private static void swap(int[] k, int low, int high) {
// TODO 自动生成的方法存根
int temp;
temp=k[low];
k[low]=k[high];
k[high]=temp;
}
public static void main(String[] args) {
int a[]={1,2,6,3,2,5,7,8,8,9};
System.out.println("aaaaaaaaaaaa");
quickSort(a, a.length);
System.out.println("排序后的结果如下:");
for(int i=0;i<a.length;i++){
System.out.print(" "+a[i]);
}
}
}
//快排的优化
public class QuickSort {
final static int MAX_LENGTH_INSERT_SORT=7;
public static void quickSort(int k[] ,int n){
QSort(k,0,n-1);
}
private static void QSort(int[] k, int low, int high) {
// TODO 自动生成的方法存根
int point;
if(high-low>MAX_LENGTH_INSERT_SORT){
point=Partiton(k,low,high);
QSort(k,low, point-1);
QSort(k,point+1,high);
}else{
Insert_Sort(k,low,high);
}
}
private static int Partiton(int[] k,int low,int high) {
int point;
int m=low+(high - low)/2;
if(k[low]>k[high]){
swap(k,low,high);
}
if(k[m]>k[high]){
swap(k,low,high);
}
if(k[m]>k[low]){
swap(k,low,high);
}
point=k[low];
while(low < high){
while(low < high&& k[high]>=point){
high--;
}
k[low]=k[high];
while(low < high && k[low]<=point){
low++;
}
k[high]=k[low];
}
k[low]=point;
return low;
}
public static void ISort(int k[],int n){
for(int i=1;i<n;i++){
int get=k[i];
int j=i-1;
while(j>=0&&k[j]>get){
k[j+1]=k[j];
j--;
}
k[j+1]=get;
}
}
public static void Insert_Sort(int[] k,int low,int high){
ISort(k, (high-low)+2);
}
private static void swap(int[] k, int low, int high) {
// TODO 自动生成的方法存根
int temp;
temp=k[low];
k[low]=k[high];
k[high]=temp;
}
public static void main(String[] args) {
int a[]={9,8,7,6,5,4,3,2,1,0};
System.out.println("aaaaaaaaaaaa");
quickSort(a, a.length);
System.out.println("排序后的结果如下:");
for(int i=0;i<a.length;i++){
System.out.print(" "+a[i]);
}
}
}
2、插入算法实现
public static void insert_Sort(int k[],int n){
int j,temp = 0,count1=0,count2=0;
for(int i=1;i<n;i++){
if(k[i]<k[i-1]){
count1++;
temp=k[i];
for(j=i-1;k[j]>temp;j--){
count2++;
k[j+1]=k[j];
}
k[j+1]=temp;
}
}
System.out.println("总共进行了"+count1+"次比较"+count2+"次移动");
}
3、希尔排序
public static void shell_Sort(int k[],int n){
int j,temp = 0,count1=0,count2=0;
int gap;
gap=n;
do{
gap=gap/3+1;
for(int i=gap;i<n;i++){
if(k[i]<k[i-gap]){
count1++;
temp=k[i];
for(j=i-gap;k[j]>temp;j-=gap){
count2++;
k[j+gap]=k[j];
}
k[j+gap]=temp;
}
}
}while(gap>1);
System.out.println("总共进行了"+count1+"次比较"+count2+"次移动");
}
4、冒泡排序算法的实现
public static void Bubble_Sort(int k[],int n){
int temp,count1 = 0,count2=0;
boolean flag=true;
for(int i=0;i<n-1&&flag;i++){
for(int j=n-1;j>i;j--){
count1++;
flag=false;
if(k[j-1]>k[j]){
count2++;
temp=k[j-1];
k[j-1]=k[j];
k[j]=temp;
flag=true;
}
}
}
System.out.println("总共进行了" + count1+"比较,进行了"+count2+"次移动");
}
5、简单选择排序
public static void select_Sort(int k[],int n){
int min,temp,count1 = 0,count2=0;
for(int i=0;i<n-1;i++){
min=i;
for(int j=i+1;j<n;j++){
count1++;
if(k[j]<k[min]){
min=j;
}
}
if(min!=i){
count2++;
temp=k[min];
k[min]=k[i];
k[i]=temp;
}
}
System.out.println("总共进行了"+count1+"次比较"+count2+"次移动");
}