常见的排序方法
//交換數組中的兩個數
??? public static void Swap(int i,int j,int arr[])
??? {
?????? if(i>=0&&i<=arr.length-1&&j>=0&&j<=arr.length-1)//確保兩個數存在
?????? {
?????????? int temp=arr[i];
?????????? arr[i]=arr[j];
?????????? arr[j]=temp;
?????? }
??? }
??? //冒泡排序法
??? public static void MaoPaoSort(int arr[])
??? { ????
?????? //冒泡排序,外層循環決定走幾趟,n個數需要n-1趟10個數,則需9趟,1個數,則需0趟
?????? int temp;
?????? 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])//交換位置,小的在前面
????????????? {
????????????????? temp=arr[j];
????????????????? arr[j]=arr[j+1];
????????????????? arr[j+1]=temp;
????????????? }
?????????? }
?????? }?????????
??? }
??? //選擇排序法
??? public static void SeclectSort(int arr[])
??? {
?????? int min=0;
?????? int flag=0;
?????? for(int i=0;i<arr.length-1;i++)
?????? {
?????????? min=arr[i];//假設第i個數暫時為最小的
?????????? flag=i;//記錄位置
?????????? //尋找在第i個后面的數中比它小的數字
?????????? for(int j=i+1;j<arr.length;j++)
?????????? {
????????????? if(min>arr[j])
????????????? {
????????????????? min=arr[j];
????????????????? flag=j;?????????????????
????????????? }
?????????? }
?????????? //接下來交換第i個和和其后面最小的數字,使得數組中第i個數是最小的
?????????? min=arr[i];
?????????? arr[i]=arr[flag];
?????????? arr[flag]=min;?????????????
?????? }
??? }
??????
??? //插入排序法
??? public static void InsertSort(int arr[])
??? {
?????? for(int i=1;i<arr.length;i++)
?????? {
?????????? int insertVal=arr[i];//要插入的數
?????????? int index=i-1;//index記錄要插入的位置
?????????? //尋找插入的位置
?????????? while(index>=0&&insertVal<arr[index])//
?????????? {
????????????? arr[index+1]=arr[index];
????????????? index--;
?????????? }
?????????? arr[index+1]=insertVal;
?????? }
??? }
??? //快速排序法
??? public static void QuickSort(int left,int right,int arr[])
??? {
?????? if(left<right)
?????? {
?????????? int i=left-1;
?????????? int j=right+1;
?????????? int mid=arr[(left+right)/2];
?????????? while(true)
?????????? {
????????????? while(arr[++i]<mid);
????????????? while(arr[--j]>mid);
????????????? if(i>=j)
????????????? {break;}
????????????? Swap(i,j,arr);?????????????????
?????????? }
?????????? QuickSort(left,--i,arr);
?????????? QuickSort(++j,right,arr);
?????? }
??? }
??? //二分查找
??? public static int TwoFind(int leftIndex,int rightIndex,int tarVal,int arr[])
??? {
?????? if(leftIndex>=0&&leftIndex<arr.length&&rightIndex>=0
????????????? &&rightIndex<arr.length&&leftIndex<=rightIndex)
?????? {
?????????? int midIndex=(leftIndex+rightIndex);
?????????? int mid=arr[midIndex];
?????????? if(mid>tarVal)
?????????? return TwoFind(leftIndex,midIndex-1,tarVal,arr);
?????????? else if(mid<tarVal)
?????????? return TwoFind(midIndex+1,rightIndex,tarVal,arr);
?????????? else
????????????? return midIndex;
?????? }
?????? else
?????????? return -1;
??? }
轉載于:https://www.cnblogs.com/hao02171990/p/3264087.html
總結
- 上一篇: 29. 栈的push,pop序列
- 下一篇: Android 获取本地外网IP、内网I