排序方法是日常业务中常用的数据操作,我们常用的排序方法有选择排序、冒泡排序、快速排序等,我在这用Java记录一下这三种方法的实现:
ps.这三者都用数组实现
- 选择排序:复杂度O(n^2)
遍历整个数组,第一个与后面的数作比较,比他小的就交换到前面来,之后从第二个数开始重复上一步操作直到遍历数组完
public class sortSelect {
public static void main(String[] args) {
int a[]=new int[5];
for (int i = 0; i <a.length ; i++) {
a[i]=(int)(Math.random()*100);
}
for (int i = 0; i <a.length ; i++) {
System.err.println("排序前数组:"+a[i]);
}
for (int i = 0; i <a.length-1 ; i++) {
for (int j = i+1; j <a.length ; j++) {
if(a[i]>a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for (int i = 0; i <a.length ; i++) {
System.err.println("排序后数组:"+a[i]);
}
}
}
- 冒泡排序:复杂度O(n^2)
遍历数组,将数组中的相邻元素两两比较,将小的放到前面来
public class sortBubble {
public static void main(String[] args) {
int a[]=new int[5];
for (int i = 0; i <a.length ; i++) {
a[i]=(int)(Math.random()*100);
}
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
for (int i = 0; i <a.length ; i++) {
for (int j = 0; j <a.length-i-1 ; j++) {
if(a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for (int i = 0; i <a.length ; i++) {
System.out.print(a[i]+" ");
}
}
}
- 快速排序:O(n log n)
选取一个基准数P(一般选取第一个),将比基准数小的放在它的左边,比基准数大的放在它的右边,之后重复上一步操作
public class sortQuick {
public static void main(String[] args) {
int arr[]=new int[5];
for (int i = 0; i <arr.length ; i++) {
arr[i] = (int) (Math.random() * 100);
}
for (int i = 0; i <arr.length ; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
sort(arr,0,arr.length-1);
for (int i = 0;i<arr.length;i++) {
System.out.print(arr[i]+" ");
}
}
private static void sort(int[]arr,int low,int high){
if(arr==null||arr.length<=1) return;
if(low<high){
int index = getIndex(arr,low,high);
sort(arr,low,index-1);
sort(arr,index+1,high);
}
}
private static int getIndex(int[]arr,int low,int high){
int temp=arr[low];
while(low<high){
while(low<high&&arr[high]>=temp){
high--;
}
arr[low]=arr[high];
while(low<high&&arr[low]<=temp){
low++;
}
arr[high]=arr[low];
}
arr[low]=temp;
return low;
}
}