冒泡排序:
原理:相邻数两两相比较,如果后面的比前面的大或者小就交换位置。所以一共比较n-1次,当第i轮排序后,数组最后i个数已经在前几轮排好序了,所以没必要再进行排序了,所以是n-i
void Bubble(int* nums,int length)
{
for(int i=1;i < length-1;i++)
{
for(int j=0; j < length-i;j++)
{
if(nums[j] > nums[j+1])
{
int temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
}
选择排序:
原理:从待排数组中选择出最小的数与第一个交换。然后再在剩余的数里面找最小的放到第二个、第三个。。。。
void SelectSort(int* nums,int length)
{
int min;
for(int i=0; i < length-1;i++)
{
min = i;
for(int j=i+1; j < length;j++)
{
min = nums[j] < nums[min]?j:min;
}
int tmp = nums[min];
nums[min] = nums[i];
nums[i] = tmp;
}
}
插入排序:
原理:将待排序的数组分为两个部分,前部分一开始就是数组第一个数,然后逐个比较后面的数据和前面的部分数据,如果比前面的都大则保持不变,比前面的小再往前找,直到比前面大的后再插入。
void InsertSort(int* nums, int length)
{
for(int i=1; i < length;i++)
{
int tmp = nums[i];
int j = i-1;
while(tmp < nums[j])
{
nums[j+1] = nums[j];
j--;
if(j == -1)
{
break;
}
}
nums[j+1] = tmp;
}
}
快速排序:
原理:在待排数组中选择一个数要求前面的数都比它小,后面的数都比它大,如果遇见比它小的交换数值,然后进行递归操作。
void QuickSort(int* nums,int low,int high)
{
int i = low;
int j = high;
int k = nums[low];
if(low < high)
{
while(i < j && nums[j] >= k)
{
j--;
}
if(i < j)
{
nums[i++] = nums[j];
}
while(i < j && nums[i] <= k)
{
i++;
}
if(i < j)
{
nums[j--] = nums[i];
}
nums[i] == k;
QuickSort(nums,low,i-1);
QuickSort(nums,i+1,high);
}
}