选择排序
c++
class Solution {
public:
//选择排序
vector<int> MySort(vector<int>& arr) {
// write code here
int n = arr.size();
for(int i = 0 ; i < n ; i++)
{
int minn = arr[i];
int mini = i;
for(int j = i+1 ; j < n ; j++ )
{
if(arr[j] <minn)
{
minn = arr[j];
mini = j;
}
}
swap(arr[i],arr[mini]);
}
return arr;
}
};python
c++
class Solution:
def MySort(self , arr ):
n = len(arr);
for i in range(0,n):
minn = arr[i];
mini = i;
for j in range(i+1,n):
if arr[j] < minn:
minn = arr[j]
mini = j
arr[i],arr[mini] = arr[mini],arr[i]
return arr冒泡排序
c++
class Solution {
public:
//冒泡排序
vector<int> MySort(vector<int>& arr) {
int n = arr.size();
for(int i = 0 ; i < n-1 ; i++ )
{
bool flag = false;
for(int j = 0 ; j < n-1-i ; j++)
{
if(arr[j] > arr[j+1])
{
flag = true;
swap(arr[j],arr[j+1]);
}
}
if(!flag){break;}
}
return arr;
}
};python
class Solution:
def MySort(self , arr ):
n = len(arr);
for i in range(0,n-1):
flag = False;
for j in range(0,n-1-i):
if arr[j] > arr[j+1]:
flag = True;
arr[j],arr[j+1] = arr[j+1],arr[j]
if flag==False:
break
return arr插入排序
c++
class Solution {
public:
//插入排序
vector<int> MySort(vector<int>& arr) {
int n = arr.size();
for(int i = 1 ; i < n ; i++)
{
int key = arr[i];
int j = i-1;
while(j>0&&arr[j]>key)
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key;
}
return arr;
}
};python
class Solution:
def MySort(self , arr ):
n = len(arr);
for i in range(1,n):
key = arr[i]
j = i-1;
while j>=0 and arr[j]>key:
arr[j+1] = arr[j]
j = j-1
arr[j+1] = key;
return arr希尔排序
c++
class Solution {
public:
//希尔排序
vector<int> MySort(vector<int>& arr) {
int n = arr.size();
int gap = n /2;
while(gap >=1)
{
for(int i = gap ; i < n ; i++)
{
int key = arr[i];
int j = i-gap;
while(j>=0 && arr[j]>key)
{
arr[j+gap] = arr[j];
j = j-gap;
}
arr[j+gap] = key;
}
gap = gap/2;
}
return arr;
}
};python
class Solution:
def MySort(self , arr ):
# write code here
gap = len(arr)//2
while(gap>=1):
for i in range(gap, len(arr)):
j = i-gap
key = arr[i]
while j >= 0 and arr[j]>key:
arr[j+gap] = arr[j]
j -= gap
arr[j+gap] = key
gap //= 2
return arr快速排序
c++
class Solution {
public:
//快速排序
int partition(vector<int>&arr,int l,int r)
{
int x = arr[l];
while( l < r )
{
while(l < r && arr[r] >= x) { r--;}
arr[l] = arr[r];
while(l < r && arr[l] < x) { l++;}
arr[r] = arr[l];
}
arr[l] = x;
return l;
}
void quicksort(vector<int>&arr,int l,int r)
{
if(l<r)
{
int mid = partition(arr,l,r);
quicksort(arr,l,mid-1);
quicksort(arr,mid+1,r);
}
}
vector<int>MySort(vector<int>&arr){
int n = arr.size();
quicksort(arr,0,n-1);
return arr;
}
};归并排序
c++
class Solution {
public:
//归并排序
void Merge(vector<int>& arr,int l,int r)
{
int mid = (l+r)/2;
int lenL = mid - l +1;
int lenR = r- mid ;
int *L = new int[lenL];
int *R = new int[lenR];
for(int i = 0 ; i < lenL ; i++)
{
L[i] = arr[l+i];
}
for(int i = 0 ; i < lenR ; i++)
{
R[i] = arr[mid+1+i];
}
int i = 0;
int j = 0;
for(int index = l ; index <= r ; index++)
{
if(j>=lenR || (i<lenL && L[i] < R[j]))
{
arr[index] = L[i];
i++;
}
else{
arr[index] = R[j];
j++;
}
}
delete []L;
delete []R;
}
void mergeSort(vector<int>& arr,int l,int r)
{
if(l<r)
{
int mid = (l+r)/2;//l+(r-l)/2
mergeSort(arr,l,mid);
mergeSort(arr,mid+1,r);
Merge(arr,l,r);
}
}
vector<int> MySort(vector<int>& arr) {
int n = arr.size();
mergeSort(arr,0,n-1);
return arr;
}
};堆排序
c++
class Solution {
public:
int heapSize;
int Left(int i)
{
if(i*2+1 >= heapSize) {return -1;}
return i*2+1;
}
int Right(int i)
{
if(i*2+2 >= heapSize) {return -1;}
return i*2+2;
}
void maxHeapify(vector<int>& arr,int i)
{
int L = Left(i);
int R = Right(i);
int maxi = i;
if(L != -1 && arr[L]>arr[i]){maxi = L;}
if(R != -1 && arr[R]>arr[maxi]){maxi = R;}
if(maxi != i)
{
swap(arr[i],arr[maxi]);
maxHeapify(arr, maxi);
}
}
void Delete(vector<int>& arr)
{
swap(arr[heapSize-1],arr[0]);
heapSize = heapSize-1;
maxHeapify(arr, 0);
}
//堆排序
vector<int> MySort(vector<int>& arr) {
int n = arr.size();
heapSize = n;
for(int i = (n-1)/2 ;i >= 0 ; i--)
{
maxHeapify(arr,i);
}
for(int i = 0 ; i < n ; i++)
{
Delete(arr);
}
//reverse(arr.begin(),arr.end());
// minHeapify(arr,1);
return arr;
}
};
京公网安备 11010502036488号