import java.util.Random;
public class Rank {
public static void main(String[] args) {
//随机生成一个长度为10,取值1~100之内的整数数组
Random rand = new Random();
int[] arr = new int[10];
for (int i = 0; i <10; i++) {
arr[i] = rand.nextInt(100)+1;
}
for(int c:arr){
System.out.print(c+"\t");
}
冒泡排序
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>=arr[j+1]){
int a =arr[j];
arr[j]=arr[j+1];
arr[j+1] = a;
}
}
}
选择排序
for(int i = 0;i<arr.length-1;i++){
int min = i;
for(int j = i+1;j<arr.length;j++){
if(arr[min]>=arr[j]){
min=j;
}
}
if(min!=i) {
int a = arr[i];
arr[i] = arr[min];
arr[min] = a;
}
}
插入排序
for(int i = 0,j;i<arr.length-1;i++){
int temp = arr[i+1];
for(j =i;j>=0&&arr[j]>temp;j--){
arr[j+1]=arr[j];
}
arr[j+1]=temp;
}
希尔排序(一般执行完希尔排序后在用插入进行排序)
int step = arr.length,t;
while ((step=step/2)>2){
for (int i = 0; i+step <arr.length ; i++) {
if(arr[i]>arr[i+step]){
t=arr[i];
arr[i]=arr[step];
arr[step]=t;
}
}
}
桶排序
final int U=10;
int[][]bucket=new int[U][arr.length];
int[]ixs=new int[U];
for (int i = 1; ; i*=10) {
int count=0,t;
for (int j = 0; j <arr.length; j++) {
count=(t=arr[j]/i)>=1?++count:count;
bucket[t%=U][ixs[t]++]=arr[j];
}
if(count==0)break;
for (int j = 0,ix=0; j <bucket.length; j++) {
for (int k = 0; k <ixs[j] ; k++) {
arr[ix++]=bucket[j][k];
}
}
for (int j = 0; j <ixs.length ; j++) {
ixs[j]=0;
}
}
System.out.println();
for(int c:arr){
System.out.print(c+"\t");
}
快速排序
public class Quick {
#调换数组位置元素
public static void swap(int[]array,int begin,int end){
int t = array[begin];
array[begin] = array[end];
array[end] = t;
}
#寻找中位数
public static int mid(int[]nums,int begin,int end){
int _begin=begin;
while (begin<end){
while (begin<end && nums[end]>=nums[_begin])end--;
while (begin<end && nums[_begin]>=nums[begin])begin++;
if (begin<end){
swap(nums,begin,end);
}
}
if(_begin!=begin){
swap(nums,begin,_begin);
}
return begin;
}
private static void quick(int[]nums,int begin,int end){
if(begin>end)return;
int mid=mid(nums,begin,end);
quick(nums,begin,mid-1);
quick(nums,mid+1,end);
}
public static int[]quicks(int[]nums){
quick(nums,0,nums.length-1);
return nums;
}
public static void main(String[] args) {
Quick.quicks(arr)
}
}
递归排序
public class Merge {
private static void merge(int[]nums,int left,int mid,int right){
int len=right-left+1;
int[]array=new int[len];
int index=0;
int i =left;
int j=mid+1;
while (i<=mid && j<=right){
array[index++]=nums[i]<=nums[j]?nums[i++]:nums[j++];
}
while (i<=mid){
array[index++]=nums[i++];
}
while (j<=right){
array[index++]=nums[j++];
}
for (int k = 0; k < len; k++) {
nums[left++]=array[k];
}
}
private static void m(int[]nums,int left,int right){
if(left==right)return;
int mid=(left+right)/2;
m(nums,left,mid);
m(nums,mid+1,right);
merge(nums,left,mid,right);
}
public static int[] megs(int[]nums){
m(nums,0,nums.length-1);
return nums;
}
public static void main(String[] args) {
Merge.megs(arr)
}
}