冒泡排序
public void sorts(int[] a) {
for(int i=0;i<a.length;i++){
boolean flag=false;
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=true;
}
}
if(!flag){
break;
}
}
}
选择排序
public void sorts(int[] a) {
for(int i=0;i<a.length-1;i++){
int minIndex=i;
for(int j=i+1;j<a.length;j++){
if(a[minIndex]>a[j]){
minIndex=j;
}
}
int temp=a[i];
a[i]=a[minIndex];
a[minIndex]=temp;
}
}
插入排序
public void sorts(int[] a) {
for(int i=1;i<a.length;i++){
int cur=a[i];
int preIndex=i-1;
while(preIndex>=0 && a[preIndex]>cur){
a[preIndex+1]=a[preIndex];
preIndex--;
}
a[preIndex+1]=cur;
}
}
快速排序
public void sort(int[] nums,int left,int right){
if(left>=right){
return;
}
int low=left+1,high=right;
while(low<=high){
if(nums[low]<=nums[left]){
low++;
}else{
swap(nums,low,high--);
}
}
swap(nums,left,--low);
sort(nums,left,low-1);
sort(nums,low+1,right);
}
public void swap(int[] nums,int x,int y){
int temp=nums[x];
nums[x]=nums[y];
nums[y]=temp;
}
归并排序
public void sort(int[] nums,int left,int right,int[] temp){
if(left>=right){
return;
}
int mid=left+(right-left)/2;
sort(nums,left,mid,temp);
sort(nums,mid+1,right,temp);
merge(nums,left,mid,right,temp);
}
public void merge(int[] nums,int left,int mid,int right,int[] temp){
int i=left,j=mid+1,low=left;
while(i<=mid && j<=right){
if(nums[i]<=nums[j]){
temp[left++]=nums[i++];
}else{
temp[left++]=nums[j++];
}
}
while(i<=mid){
temp[left++]=nums[i++];
}
while(j<=right){
temp[left++]=nums[j++];
}
for(int k=low;k<=right;k++){
nums[k]=temp[k];
}
}
堆排序
public void sort(int[] nums){
if(nums==null || nums.length==0){
return;
}
for(int i=(nums.length-2)/2;i>=0;i--){//从最后一个非叶子结点开始建堆
adjustHeap(nums,i,nums.length-1);
}
for(int i=nums.length-1;i>=0;i--){//将最大的元素放在最后,减小堆的规模,重新调整堆,将最大元素放在顶部
swap(nums,0,i);
adjustHeap(nums,0,i-1);
}
}
public void adjustHeap(int[] nums,int curIndex,int end){
while(2*curIndex+1<=end){//左子节点是否在范围内
int son=2*curIndex+1;
if(son+1<=end && nums[son]<nums[son+1]){//找到最大的子结点
son++;
}
if(nums[curIndex]<nums[son]){//与最大的子结点互换元素
swap(nums,curIndex,son);
}
curIndex=son;//当前结点指针转到子结点
}
}
public void swap(int[] nums,int x,int y){
int temp=nums[x];
nums[x]=nums[y];
nums[y]=temp;
}