快速,起泡,选择排序

来源:互联网 发布:大屏幕windows平板电脑 编辑:程序博客网 时间:2024/04/23 21:05
一:
选择排序法:T(N)=O(n2)(时序复杂度)
通过记录数组下标的方法来进行排序的,找到第一个最小的数后把它放在第一个位置上。第二次从数组的第二个元素查找,找到第二个最小的数然后与数组的第二个元素交换。依次类推,共需要经过N-1趟。
void select_sort(int s[N], int n)
{
int i, j, min, t;

for (i=0; i<N-1; i++)
{
min = i;
for (j=i+1; j<N; j++)
{
if (s[min] > s[j]) min = j;
}
t = s[i];
s[i] = s[min];
s[min] = t;
}
}
二:起泡排序法:T(N)=O(n2)
void bubble_sort(int s[N], int n)
{
int i, j, t, flag;

for (i=N-1; i>0; i--)
{
flag = 0;
for (j=0; j<i; j++)
{
if (s[j] > s[j+1]) 
{
t = s[j];
s[j] = s[j+1];
s[j+1] = t;
flag = 1;
}  // end if
}  // end for 
if ( !flag ) break;
}
}
三:
快速排序法:T(N)=O(nlog2n)
利用的思想是递归思想,经过key的一趟排序,确定某个记录(数据)在排序后的最终位置。
void quick_sort(int s[N], int low, int high)
{
int i, j, key;

i = low;
j = high;
key = s[i];

while (i < j)
{
while ((i < j) && (s[j] >= key)) j--;
if (i < j) s[i] = s[j];
while ((i < j) && (s[i] <= key)) i++;
if (i < j) s[j] = s[i];
}
s[i] = key;
if (low < i-1) quick_sort(s, low, i-1);
if (high > i+1) quick_sort(s, i+1, high);
}
比较这三种排序的时间复杂度快速排序的时间复杂度最小。
原创粉丝点击