欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用c語(yǔ)言實(shí)現(xiàn)冒泡排序,選擇排序,快速排序

 更新時(shí)間:2013年05月28日 15:19:35   作者:  
本篇文章是對(duì)使用c語(yǔ)言實(shí)現(xiàn)冒泡排序,選擇排序,快速排序的代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
代碼如下所示:
復(fù)制代碼 代碼如下:

/*
 * 冒泡排序
 */
void BubbleSort(int arr[], int n)
{
 int temp;
 for (int i = 0; i < n - 1; i++)
 {
  for (int j = i + 1; j < n; j++)
  {
   if (arr[i] > arr[j])
   {
    temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
   }
  }
 }
}
/*
 * 選擇排序
 */
void ChooseSort(int arr[], int n)
{
 int temp, k;
 for (int i = 0; i < n - 1; i++)
 {
  k = i;
  for (int j = i + 1; j < n; j++)
  {
   if (arr[k] > arr[j])
   {
    k = j;
   }
  }
  if (k != i)
  {
   temp = arr[i];
   arr[i] = arr[k];
   arr[k] = temp;
  }
 }
}
/*
 * 快速排序,官方原版
 */
void q_sort(int numbers[], int left, int right)
{
 int pivot, l_hold, r_hold;
 l_hold = left;
 r_hold = right;
 pivot = numbers[left];
 while (left < right)
 {
  while ((numbers[right] >= pivot) && (left < right))
  {
   right--;
  }
  if (left != right)
  {
   numbers[left] = numbers[right];
   left++;
  }
  while ((numbers[left] <= pivot) && (left < right))
  {
   left++;
  }
  if (left != right)
  {
   numbers[right] = numbers[left];
   right--;
  }
 }
 numbers[left] = pivot;
 pivot = left;
 left = l_hold;
 right = r_hold;
 if (left < pivot)
 {
  q_sort(numbers, left, pivot-1);
 }
 if (right > pivot)
 {
  q_sort(numbers, pivot+1, right);
 }
}
/*
 * 快速排序
 */
void quick_sort(int *x, int low, int high)
{
 int i, j, t;
 if (low < high) /*要排序的元素起止下標(biāo),保證小的放在左邊,大的放在右邊。這里以下標(biāo)為low的元素為基準(zhǔn)點(diǎn)*/
 {
  i = low;
  j = high;
  t = *(x+low); /*暫存基準(zhǔn)點(diǎn)的數(shù)*/
  while (i<j) /*循環(huán)掃描*/
  {
   while (i<j && *(x+j)>t) /*在右邊的只要比基準(zhǔn)點(diǎn)大仍放在右邊*/
   {
    j--; /*前移一個(gè)位置*/
   }
   if (i<j)
   {
    *(x+i) = *(x+j); /*上面的循環(huán)退出:即出現(xiàn)比基準(zhǔn)點(diǎn)小的數(shù),替換基準(zhǔn)點(diǎn)的數(shù)*/
    i++; /*后移一個(gè)位置,并以此為基準(zhǔn)點(diǎn)*/
   }
   while (i<j && *(x+i)<=t) /*在左邊的只要小于等于基準(zhǔn)點(diǎn)仍放在左邊*/
   {
    i++; /*后移一個(gè)位置*/
   }
   if (i<j)
   {
    *(x+j) = *(x+i); /*上面的循環(huán)退出:即出現(xiàn)比基準(zhǔn)點(diǎn)大的數(shù),放到右邊*/
    j--; /*前移一個(gè)位置*/
   }
  }
  *(x+i) = t; /*一遍掃描完后,放到適當(dāng)位置*/
  quick_sort(x,low,i-1);  /*對(duì)基準(zhǔn)點(diǎn)左邊的數(shù)再執(zhí)行快速排序*/
  quick_sort(x,i+1,high);  /*對(duì)基準(zhǔn)點(diǎn)右邊的數(shù)再執(zhí)行快速排序*/
 }
}
// 輸出數(shù)組元素
void outArray(int arr[], int n)
{
 for(int i = 0; i < n; i++)
 {
  cout<<arr[i]<<" ";
 }
 cout<<endl;
}
void main()
{
 const int N = 5;
 int arr1[N] = {4, 3, 5, 2, 1};
 int arr2[N] = {4, 3, 5, 2, 1};
 int arr3[N] = {4, 3, 5, 2, 1};
 cout<<"Before bubble sort"<<endl;
 outArray(arr1, N);
 BubbleSort(arr1, N);
 cout<<"After bubble sort"<<endl;
 outArray(arr1, N);
 cout<<"/nBefore chooose sort"<<endl;
 outArray(arr2, N);
 ChooseSort(arr2, N);
 cout<<"After chooose sort"<<endl;
 outArray(arr2, N);
 cout<<"/nBefore quick sort"<<endl;
 outArray(arr3, N);
 //q_sort(arr3,0, N - 1);
 quick_sort(arr3,0, N - 1);
 cout<<"After quick sort"<<endl;
 outArray(arr3, N);
 system("pause");
}

相關(guān)文章

  • C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的掃雷游戲

    C語(yǔ)言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的掃雷游戲

    掃雷是電腦上很經(jīng)典的游戲,特意去網(wǎng)上玩了一會(huì),幾次調(diào)試之后,發(fā)現(xiàn)這個(gè)比三子棋要復(fù)雜一些,尤其是空白展開(kāi)算法上和堵截玩家有的一拼,與實(shí)際游戲差別較大,不能使用光標(biāo),下面來(lái)詳解每一步分析
    2021-10-10
  • C++大小字母的轉(zhuǎn)換方式

    C++大小字母的轉(zhuǎn)換方式

    這篇文章主要介紹了C++大小字母的轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 基于C語(yǔ)言實(shí)現(xiàn)的aes256加密算法示例

    基于C語(yǔ)言實(shí)現(xiàn)的aes256加密算法示例

    這篇文章主要介紹了基于C語(yǔ)言實(shí)現(xiàn)的aes256加密算法,結(jié)合具體實(shí)例形式詳細(xì)分析了C語(yǔ)言實(shí)現(xiàn)的aes256加密算法實(shí)現(xiàn)步驟與使用技巧,需要的朋友可以參考下
    2017-02-02
  • Qt中互斥鎖QMutex和QMutexLocker的使用

    Qt中互斥鎖QMutex和QMutexLocker的使用

    本文主要介紹了Qt中互斥鎖QMutex和QMutexLocker的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • C++11?nullptr實(shí)現(xiàn)初始化空指針

    C++11?nullptr實(shí)現(xiàn)初始化空指針

    避免產(chǎn)生“野指針”最有效的方法,就是在定義指針的同時(shí)完成初始化操作,本文主要介紹了C++11?nullptr初始化空指針,感興趣的可以了解一下
    2022-01-01
  • Qt使用QPainter實(shí)現(xiàn)自定義圓形進(jìn)度條

    Qt使用QPainter實(shí)現(xiàn)自定義圓形進(jìn)度條

    這篇文章主要介紹了Qt如何使用QPainter實(shí)現(xiàn)自定義圓形進(jìn)度條功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Qt有一定的幫助,需要的可以參考一下
    2022-06-06
  • 關(guān)于UDP服務(wù)器客戶端編程流程介紹

    關(guān)于UDP服務(wù)器客戶端編程流程介紹

    大家好,本篇文章主要講的是關(guān)于UDP服務(wù)器客戶端編程流程介紹,感興趣的同學(xué)趕快來(lái)看看吧,對(duì)你有幫助的話記得收藏
    2021-12-12
  • VC++的combobox控件用法匯總

    VC++的combobox控件用法匯總

    這篇文章主要介紹了VC++的combobox控件用法,對(duì)VC++初學(xué)者來(lái)說(shuō)尤為重要,需要的朋友可以參考下
    2014-08-08
  • Qt基礎(chǔ)開(kāi)發(fā)之Qt多線程類QThread與Qt定時(shí)器類QTimer的詳細(xì)方法與實(shí)例

    Qt基礎(chǔ)開(kāi)發(fā)之Qt多線程類QThread與Qt定時(shí)器類QTimer的詳細(xì)方法與實(shí)例

    這篇文章主要介紹了Qt基礎(chǔ)開(kāi)發(fā)之Qt多線程類QThread與Qt定時(shí)器類QTimer的詳細(xì)方法與實(shí)例,需要的朋友可以參考下
    2020-03-03
  • QT利用QPainter繪制三維餅狀圖

    QT利用QPainter繪制三維餅狀圖

    這篇文章主要為大家詳細(xì)介紹了如何利用QPainter實(shí)現(xiàn)三維餅狀圖的繪制,由于Qt中沒(méi)有三維餅狀圖的繪制組件,因此只能自行繪制,感興趣的可以動(dòng)手嘗試一下
    2022-06-06

最新評(píng)論